chiark / gitweb /
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 d86904c6c02cf1feec293dac9856703223d727a9..bd16ec71473787df0afd393d908ade00a3c00576 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));                                           \
   }