struct/buf.c (buf_getmem*): Add an explicit `BENSURE'.
authorMark Wooding <mdw@distorted.org.uk>
Fri, 11 Oct 2019 22:15:42 +0000 (23:15 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 19 Oct 2019 13:41:41 +0000 (14:41 +0100)
Otherwise we fail when processing a 64-bit length on a 32-bit platform:
an overlong 64-bit length gets truncated to a possibly-acceptable 32-bit
length in the implicit conversion to `size_t' in the call to `buf_get'.
Using `BENSURE' directly ensures that the comparison gets done with the
correct integer type.

struct/buf.c

index d86904c..bd16ec7 100644 (file)
@@ -247,6 +247,7 @@ static int findz(buf *b, size_t *nn)
   {                                                                    \
     uint##n sz;                                                                \
     if (buf_getu##w(b, &sz)) return (0);                               \
+    if (BENSURE(b, sz)) return (0);                                    \
     *nn = sz;                                                          \
     return (buf_get(b, sz));                                           \
   }