diff options
author | Michael Cahill <michael.cahill@mongodb.com> | 2017-08-28 14:07:38 +1000 |
---|---|---|
committer | Alex Gorrod <alexander.gorrod@mongodb.com> | 2017-08-28 14:07:38 +1000 |
commit | 1ea9b1d7843856e947aa6680d111b95e19274778 (patch) | |
tree | eb09eb62ffa8037e48c78ffa96dc863a5ee7f104 | |
parent | 94eaa53afc9b0d2eff5e318903ede0aa47bc976d (diff) | |
download | mongo-1ea9b1d7843856e947aa6680d111b95e19274778.tar.gz |
WT-3545 Fix array bounds warnings with gcc 7. (#3622)
-rw-r--r-- | test/packing/intpack-test.c | 6 | ||||
-rw-r--r-- | test/packing/intpack-test2.c | 10 | ||||
-rw-r--r-- | test/packing/intpack-test3.c | 11 |
3 files changed, 22 insertions, 5 deletions
diff --git a/test/packing/intpack-test.c b/test/packing/intpack-test.c index 172575c3d3d..2b482d289dc 100644 --- a/test/packing/intpack-test.c +++ b/test/packing/intpack-test.c @@ -32,8 +32,10 @@ int main(void) { uint64_t ncalls, r, r2, s; - uint8_t buf[WT_INTPACK64_MAXSIZE], *p; + uint8_t buf[WT_INTPACK64_MAXSIZE + 8]; /* -Werror=array-bounds */ + uint8_t *p; const uint8_t *cp; + size_t used_len; int i; memset(buf, 0xff, sizeof(buf)); /* -Werror=maybe-uninitialized */ @@ -46,6 +48,8 @@ main(void) #if 1 p = buf; testutil_check(__wt_vpack_uint(&p, sizeof(buf), r)); + used_len = (size_t)(p - buf); + testutil_assert(used_len <= WT_INTPACK64_MAXSIZE); cp = buf; testutil_check( __wt_vunpack_uint(&cp, sizeof(buf), &r2)); diff --git a/test/packing/intpack-test2.c b/test/packing/intpack-test2.c index 13f9ab0d2d7..82a4e1d36d2 100644 --- a/test/packing/intpack-test2.c +++ b/test/packing/intpack-test2.c @@ -31,13 +31,19 @@ int main(void) { - uint8_t buf[WT_INTPACK64_MAXSIZE], *p, *end; + uint8_t buf[WT_INTPACK64_MAXSIZE + 8]; /* -Werror=array-bounds */ + uint8_t *p, *end; int64_t i; + size_t used_len; + + memset(buf, 0xff, sizeof(buf)); /* -Werror=maybe-uninitialized */ for (i = 1; i < 1LL << 60; i <<= 1) { end = buf; testutil_check( __wt_vpack_uint(&end, sizeof(buf), (uint64_t)i)); + used_len = (size_t)(end - buf); + testutil_assert(used_len <= WT_INTPACK64_MAXSIZE); printf("%" PRId64 " ", i); for (p = buf; p < end; p++) printf("%02x", *p); @@ -45,6 +51,8 @@ main(void) end = buf; testutil_check(__wt_vpack_int(&end, sizeof(buf), -i)); + used_len = (size_t)(end - buf); + testutil_assert(used_len <= WT_INTPACK64_MAXSIZE); printf("%" PRId64 " ", -i); for (p = buf; p < end; p++) printf("%02x", *p); diff --git a/test/packing/intpack-test3.c b/test/packing/intpack-test3.c index dad31fd7f7d..2f74c84c6d8 100644 --- a/test/packing/intpack-test3.c +++ b/test/packing/intpack-test3.c @@ -35,17 +35,20 @@ void test_value(int64_t val) { const uint8_t *cp; - uint8_t buf[WT_INTPACK64_MAXSIZE], *p; + uint8_t buf[WT_INTPACK64_MAXSIZE + 8]; /* -Werror=array-bounds */ + uint8_t *p; int64_t sinput, soutput; uint64_t uinput, uoutput; size_t used_len; - soutput = 0; /* -Werror=maybe-uninitialized */ + memset(buf, 0xff, sizeof(buf)); /* -Werror=maybe-uninitialized */ sinput = val; - soutput = 0; /* Make GCC happy. */ + soutput = 0; /* -Werror=maybe-uninitialized */ + p = buf; testutil_check(__wt_vpack_int(&p, sizeof(buf), sinput)); used_len = (size_t)(p - buf); + testutil_assert(used_len <= WT_INTPACK64_MAXSIZE); cp = buf; testutil_check(__wt_vunpack_int(&cp, used_len, &soutput)); /* Ensure we got the correct value back */ @@ -70,6 +73,8 @@ test_value(int64_t val) p = buf; testutil_check(__wt_vpack_uint(&p, sizeof(buf), uinput)); + used_len = (size_t)(p - buf); + testutil_assert(used_len <= WT_INTPACK64_MAXSIZE); cp = buf; testutil_check(__wt_vunpack_uint(&cp, sizeof(buf), &uoutput)); /* Ensure we got the correct value back */ |