diff options
| author | Ian Lance Taylor <iant@golang.org> | 2014-01-21 06:12:54 -0800 |
|---|---|---|
| committer | Ian Lance Taylor <iant@golang.org> | 2014-01-21 06:12:54 -0800 |
| commit | 6111dc4e71ffd843ac8029df4fd67d32689f8e36 (patch) | |
| tree | c9dee14995ba8a7fcb9a4d711ef1814e707cc7f8 | |
| parent | cb133c66073303b08e893d6b71faf98bda2402e9 (diff) | |
| download | go-6111dc4e71ffd843ac8029df4fd67d32689f8e36.tar.xz | |
liblink: check for symgrow size too large
Many calls to symgrow pass a vlong value. Change the function
to not implicitly truncate, and to instead give an error if
the value is too large.
R=golang-codereviews, gobot, rsc
CC=golang-codereviews
https://golang.org/cl/54010043
| -rw-r--r-- | include/link.h | 2 | ||||
| -rw-r--r-- | src/liblink/data.c | 8 |
2 files changed, 8 insertions, 2 deletions
diff --git a/include/link.h b/include/link.h index 2e23d20c7c..32d158428d 100644 --- a/include/link.h +++ b/include/link.h @@ -500,7 +500,7 @@ vlong setuint32(Link *ctxt, LSym *s, vlong r, uint32 v); vlong setuint64(Link *ctxt, LSym *s, vlong r, uint64 v); vlong setuint8(Link *ctxt, LSym *s, vlong r, uint8 v); vlong setuintxx(Link *ctxt, LSym *s, vlong off, uint64 v, vlong wid); -void symgrow(Link *ctxt, LSym *s, int32 siz); +void symgrow(Link *ctxt, LSym *s, vlong siz); // go.c void double2ieee(uint64 *ieee, double native); diff --git a/src/liblink/data.c b/src/liblink/data.c index 9a481b6e5e..58d6d6b5e8 100644 --- a/src/liblink/data.c +++ b/src/liblink/data.c @@ -41,10 +41,16 @@ mangle(char *file) } void -symgrow(Link *ctxt, LSym *s, int32 siz) +symgrow(Link *ctxt, LSym *s, vlong lsiz) { + int32 siz; + USED(ctxt); + siz = (int32)lsiz; + if((vlong)siz != lsiz) + sysfatal("symgrow size %lld too long", lsiz); + if(s->np >= siz) return; |
