chiark / gitweb /
buffer.c (wbmeth_putblkN): Check input block size.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 12 Oct 2019 20:07:05 +0000 (21:07 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 17 Nov 2019 01:43:30 +0000 (01:43 +0000)
Otherwise the C code fails an assertion.

buffer.c

index 17d7caa8b7b62ca626a94476e43991afe8013109..27eafd1ef2e6f0773cb62bdc2677419095b0c6ef 100644 (file)
--- a/buffer.c
+++ b/buffer.c
@@ -406,16 +406,20 @@ static PyObject *wbmeth_put(PyObject *me, PyObject *arg)
   }
 DOUINTCONV(WBMETH_PUTU_)
 
+#define MASKz 0
 #define SZ_z 1
 #define WBMETH_PUTBLK_(n, W, w)                                                \
   static PyObject *wbmeth_putblk##w(PyObject *me, PyObject *arg)       \
   {                                                                    \
     char *p;                                                           \
     Py_ssize_t sz;                                                     \
-    if (!PyArg_ParseTuple(arg, "s#:putblk" #w, &p, &sz)) return (0);   \
+    if (!PyArg_ParseTuple(arg, "s#:putblk" #w, &p, &sz)) goto end;     \
+    if (MASK##W && sz > MASK##W) VALERR("too large");                  \
     ensure(me, sz + SZ_##n);                                           \
     buf_putmem##w(BUF_B(me), p, sz); assert(BOK(BUF_B(me)));           \
     RETURN_ME;                                                         \
+  end:                                                                 \
+    return (0);                                                                \
   }
 BUF_DOSUFFIXES(WBMETH_PUTBLK_)