Fix-up error-exits on struct_unpack().

This commit is contained in:
Raymond Hettinger 2007-04-04 21:57:12 +00:00
parent 3608f0570e
commit b2064d7280
1 changed files with 17 additions and 13 deletions

View File

@ -1487,29 +1487,33 @@ s_unpack(PyObject *self, PyObject *inputstr)
{
char *start;
int len;
PyObject * args;
PyObject *args=NULL, *result;
PyStructObject *soself = (PyStructObject *)self;
assert(PyStruct_Check(self));
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) {
return s_unpack_internal(soself, PyString_AS_STRING(inputstr));
}
args = PyTuple_Pack(1, inputstr);
if (args == NULL)
return NULL;
if (!PyArg_ParseTuple(args, "s#:unpack", &start, &len)) {
Py_DECREF(args);
return NULL;
}
if (!PyArg_ParseTuple(args, "s#:unpack", &start, &len))
goto fail;
if (soself->s_size != len)
goto fail;
result = s_unpack_internal(soself, start);
Py_DECREF(args);
if (soself->s_size != len) {
PyErr_Format(StructError,
"unpack requires a string argument of length %zd",
soself->s_size);
return NULL;
}
return s_unpack_internal(soself, start);
return result;
fail:
Py_XDECREF(args);
PyErr_Format(StructError,
"unpack requires a string argument of length %zd",
soself->s_size);
return NULL;
}
PyDoc_STRVAR(s_unpack_from__doc__,