unicode_string = 'T'
self.assertRaises(TypeError, marshal.loads, unicode_string)
+ def _test_eof(self):
+ data = marshal.dumps(("hello", "dolly", None))
+ for i in range(len(data)):
+ self.assertRaises(EOFError, marshal.loads, data[0: i])
+
LARGE_SIZE = 2**31
pointer_size = 8 if sys.maxsize > 0xFFFFFFFF else 4
PyObject *v, *v2;
Py_ssize_t idx = 0;
long i, n;
- int type = r_byte(p);
+ int type, code = r_byte(p);
int flag;
PyObject *retval;
+ if (code == EOF) {
+ PyErr_SetString(PyExc_EOFError,
+ "EOF read where object expected");
+ return NULL;
+ }
+
p->depth++;
if (p->depth > MAX_MARSHAL_STACK_DEPTH) {
return NULL;
}
- flag = type & FLAG_REF;
- type = type & ~FLAG_REF;
+ flag = code & FLAG_REF;
+ type = code & ~FLAG_REF;
#define R_REF(O) do{\
if (flag) \
switch (type) {
- case EOF:
- PyErr_SetString(PyExc_EOFError,
- "EOF read where object expected");
- retval = NULL;
- break;
-
case TYPE_NULL:
retval = NULL;
break;