Fix-up error-exits on struct_unpack().
This commit is contained in:
parent
3608f0570e
commit
b2064d7280
|
@ -1487,29 +1487,33 @@ s_unpack(PyObject *self, PyObject *inputstr)
|
||||||
{
|
{
|
||||||
char *start;
|
char *start;
|
||||||
int len;
|
int len;
|
||||||
PyObject * args;
|
PyObject *args=NULL, *result;
|
||||||
PyStructObject *soself = (PyStructObject *)self;
|
PyStructObject *soself = (PyStructObject *)self;
|
||||||
assert(PyStruct_Check(self));
|
assert(PyStruct_Check(self));
|
||||||
assert(soself->s_codes != NULL);
|
assert(soself->s_codes != NULL);
|
||||||
if (inputstr != NULL && PyString_Check(inputstr) &&
|
if (inputstr == NULL)
|
||||||
|
goto fail;
|
||||||
|
if (PyString_Check(inputstr) &&
|
||||||
PyString_GET_SIZE(inputstr) == soself->s_size) {
|
PyString_GET_SIZE(inputstr) == soself->s_size) {
|
||||||
return s_unpack_internal(soself, PyString_AS_STRING(inputstr));
|
return s_unpack_internal(soself, PyString_AS_STRING(inputstr));
|
||||||
}
|
}
|
||||||
args = PyTuple_Pack(1, inputstr);
|
args = PyTuple_Pack(1, inputstr);
|
||||||
if (args == NULL)
|
if (args == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (!PyArg_ParseTuple(args, "s#:unpack", &start, &len)) {
|
if (!PyArg_ParseTuple(args, "s#:unpack", &start, &len))
|
||||||
Py_DECREF(args);
|
goto fail;
|
||||||
return NULL;
|
if (soself->s_size != len)
|
||||||
}
|
goto fail;
|
||||||
|
result = s_unpack_internal(soself, start);
|
||||||
Py_DECREF(args);
|
Py_DECREF(args);
|
||||||
if (soself->s_size != len) {
|
return result;
|
||||||
PyErr_Format(StructError,
|
|
||||||
"unpack requires a string argument of length %zd",
|
fail:
|
||||||
soself->s_size);
|
Py_XDECREF(args);
|
||||||
return NULL;
|
PyErr_Format(StructError,
|
||||||
}
|
"unpack requires a string argument of length %zd",
|
||||||
return s_unpack_internal(soself, start);
|
soself->s_size);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(s_unpack_from__doc__,
|
PyDoc_STRVAR(s_unpack_from__doc__,
|
||||||
|
|
Loading…
Reference in New Issue