msvcirt: Avoid "array subscript above array bounds" warnings in test_ostrstream and test_strstreambuf.

Gerald Pfeifer gerald at pfeifer.com
Sun Oct 30 08:55:33 CDT 2016


Hi Iván, hi Piotr,

I am now seeing

  msvcirt.c:4211:34: warning: array subscript is above array bounds
  msvcirt.c:4218:35: warning: array subscript is above array bounds
  msvcirt.c:2125:33: warning: array subscript is above array bounds
  msvcirt.c:2132:34: warning: array subscript is above array bounds

when using current GCC development snapshots to build Wine.

All of the occurrences are of the form

  ok(ssb1.base.ebuf == buffer + 0x7fffffff || ssb1.base.ebuf == (char*)-1,
                       ~~~~~~~^~~~~~~~~~~~

Since buffer is defined as char[64], the warning is technically
correct.

One way to avoid that is casting things to size_t, for example, 
which the patch below does.

Gerald


Signed-off-by: Gerald Pfeifer <gerald at pfeifer.com>
---
 dlls/msvcirt/tests/msvcirt.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/dlls/msvcirt/tests/msvcirt.c b/dlls/msvcirt/tests/msvcirt.c
index 2234abf..fb7c852 100644
--- a/dlls/msvcirt/tests/msvcirt.c
+++ b/dlls/msvcirt/tests/msvcirt.c
@@ -2122,14 +2122,14 @@ static void test_strstreambuf(void)
     ok(ssb1.base.allocated == 0, "wrong allocate value, expected 0 got %d\n", ssb1.base.allocated);
     ok(ssb1.base.unbuffered == 0, "wrong unbuffered value, expected 0 got %d\n", ssb1.base.unbuffered);
     ok(ssb1.base.base == buffer, "wrong buffer, expected %p got %p\n", buffer, ssb1.base.base);
-    ok(ssb1.base.ebuf == buffer + 0x7fffffff || ssb1.base.ebuf == (char*)-1,
+    ok((size_t)ssb1.base.ebuf == (size_t)buffer + 0x7fffffff || ssb1.base.ebuf == (char*)-1,
         "wrong buffer end, expected %p + 0x7fffffff or -1, got %p\n", buffer, ssb1.base.ebuf);
     ok(ssb1.base.eback == buffer, "wrong get base, expected %p got %p\n", buffer, ssb1.base.eback);
     ok(ssb1.base.gptr == buffer, "wrong get pointer, expected %p got %p\n", buffer, ssb1.base.gptr);
     ok(ssb1.base.egptr == buffer + 20, "wrong get end, expected %p got %p\n", buffer + 20, ssb1.base.egptr);
     ok(ssb1.base.pbase == buffer + 20, "wrong put base, expected %p got %p\n", buffer + 20, ssb1.base.pbase);
     ok(ssb1.base.pptr == buffer + 20, "wrong put pointer, expected %p got %p\n", buffer + 20, ssb1.base.pptr);
-    ok(ssb1.base.epptr == buffer + 0x7fffffff || ssb1.base.epptr == (char*)-1,
+    ok((size_t)ssb1.base.epptr == (size_t)buffer + 0x7fffffff || ssb1.base.epptr == (char*)-1,
         "wrong put end, expected %p + 0x7fffffff or -1, got %p\n", buffer, ssb1.base.epptr);
     ok(ssb1.dynamic == 0, "expected 0, got %d\n", ssb1.dynamic);
     ok(ssb1.constant == 1, "expected 1, got %d\n", ssb1.constant);
@@ -4208,14 +4208,14 @@ static void test_ostrstream(void)
     ok(pssb->base.allocated == 0, "wrong allocate value, expected 0 got %d\n", pssb->base.allocated);
     ok(pssb->base.unbuffered == 0, "wrong unbuffered value, expected 0 got %d\n", pssb->base.unbuffered);
     ok(pssb->base.base == buffer, "wrong buffer, expected %p got %p\n", buffer, pssb->base.base);
-    ok(pssb->base.ebuf == buffer + 0x7fffffff || pssb->base.ebuf == (char*) -1,
+    ok((size_t)pssb->base.ebuf == (size_t)buffer + 0x7fffffff || pssb->base.ebuf == (char*) -1,
         "wrong buffer end, expected %p + 0x7fffffff or -1, got %p\n", buffer, pssb->base.ebuf);
     ok(pssb->base.eback == buffer, "wrong get base, expected %p got %p\n", buffer, pssb->base.eback);
     ok(pssb->base.gptr == buffer, "wrong get pointer, expected %p got %p\n", buffer, pssb->base.gptr);
     ok(pssb->base.egptr == buffer, "wrong get end, expected %p got %p\n", buffer, pssb->base.egptr);
     ok(pssb->base.pbase == buffer, "wrong put base, expected %p got %p\n", buffer, pssb->base.pbase);
     ok(pssb->base.pptr == buffer + 4, "wrong put pointer, expected %p got %p\n", buffer + 4, pssb->base.pptr);
-    ok(pssb->base.epptr == buffer + 0x7fffffff || pssb->base.epptr == (char*) -1,
+    ok((size_t)pssb->base.epptr == (size_t)buffer + 0x7fffffff || pssb->base.epptr == (char*) -1,
         "wrong buffer end, expected %p + 0x7fffffff or -1, got %p\n", buffer, pssb->base.epptr);
     ok(pssb->base.do_lock == -1, "expected -1 got %d\n", pssb->base.do_lock);
     call_func1(p_ostrstream_dtor, &os1.base_ios);
-- 
2.9.2


More information about the wine-patches mailing list