summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Cahill <michael.cahill@mongodb.com>2017-08-28 14:07:38 +1000
committerAlex Gorrod <alexander.gorrod@mongodb.com>2017-08-28 14:07:38 +1000
commit1ea9b1d7843856e947aa6680d111b95e19274778 (patch)
treeeb09eb62ffa8037e48c78ffa96dc863a5ee7f104
parent94eaa53afc9b0d2eff5e318903ede0aa47bc976d (diff)
downloadmongo-1ea9b1d7843856e947aa6680d111b95e19274778.tar.gz
WT-3545 Fix array bounds warnings with gcc 7. (#3622)
-rw-r--r--test/packing/intpack-test.c6
-rw-r--r--test/packing/intpack-test2.c10
-rw-r--r--test/packing/intpack-test3.c11
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 */