diff options
| author | Russ Cox <rsc@golang.org> | 2008-11-19 09:35:36 -0800 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2008-11-19 09:35:36 -0800 |
| commit | 9b8a6dc7da6e0ef2a3afe9094fcda4f645442702 (patch) | |
| tree | 73d24975f897e0451eb3132142d3a3540764d545 /src/runtime/array.c | |
| parent | addd6fa84608a292983f910d8ab1e3dbbfab71a7 (diff) | |
| download | go-9b8a6dc7da6e0ef2a3afe9094fcda4f645442702.tar.xz | |
change array slice error to include bounds
$ 6.out
slice[5:12] of [10] array
throw: array slice
SIGSEGV: segmentation violation
R=r
DELTA=15 (13 added, 0 deleted, 2 changed)
OCL=19540
CL=19580
Diffstat (limited to 'src/runtime/array.c')
| -rw-r--r-- | src/runtime/array.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/runtime/array.c b/src/runtime/array.c index 548886e6cf..a67deb00cd 100644 --- a/src/runtime/array.c +++ b/src/runtime/array.c @@ -38,6 +38,19 @@ sys·newarray(uint32 nel, uint32 cap, uint32 width, Array* ret) } } +static void +throwslice(uint32 lb, uint32 hb, uint32 n) +{ + prints("slice["); + sys·printint(lb); + prints(":"); + sys·printint(hb); + prints("] of ["); + sys·printint(n); + prints("] array\n"); + throw("array slice"); +} + // arraysliced(old *[]any, lb uint32, hb uint32, width uint32) (ary *[]any); void sys·arraysliced(Array* old, uint32 lb, uint32 hb, uint32 width, Array* ret) @@ -62,7 +75,7 @@ sys·arraysliced(Array* old, uint32 lb, uint32 hb, uint32 width, Array* ret) sys·printint(old->cap); prints("\n"); } - throw("sys·arraysliced: new size exceeds old size"); + throwslice(lb, hb, old->cap); } // new array is inside old array @@ -109,7 +122,7 @@ sys·arrayslices(byte* old, uint32 nel, uint32 lb, uint32 hb, uint32 width, Arra sys·printint(width); prints("\n"); } - throw("sys·arrayslices: new size exceeds cap"); + throwslice(lb, hb, nel); } // new array is inside old array |
