Commit 4af5c8ce authored by Hye-Shik Chang's avatar Hye-Shik Chang

SF #1444030: Fix several potential defects found by Coverity.

(reviewed by Neal Norwitz)
parent ef1701f7
......@@ -1852,10 +1852,13 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Py_DECREF(v);
}
} else if (initial != NULL && PyString_Check(initial)) {
PyObject *t_initial = PyTuple_Pack(1,
initial);
PyObject *v =
array_fromstring((arrayobject *)a,
PyObject *t_initial, *v;
t_initial = PyTuple_Pack(1, initial);
if (t_initial == NULL) {
Py_DECREF(a);
return NULL;
}
v = array_fromstring((arrayobject *)a,
t_initial);
Py_DECREF(t_initial);
if (v == NULL) {
......
......@@ -544,6 +544,7 @@ newOobject(int size) {
if (!self->buf) {
PyErr_SetString(PyExc_MemoryError,"out of memory");
self->buf_size = 0;
Py_DECREF(self);
return NULL;
}
......
......@@ -1167,6 +1167,8 @@ initzipimport(void)
mod = Py_InitModule4("zipimport", NULL, zipimport_doc,
NULL, PYTHON_API_VERSION);
if (mod == NULL)
return;
ZipImportError = PyErr_NewException("zipimport.ZipImportError",
PyExc_ImportError, NULL);
......
......@@ -2809,6 +2809,8 @@ long_bitwise(PyLongObject *a,
if (a->ob_size < 0) {
a = (PyLongObject *) long_invert(a);
if (a == NULL)
return NULL;
maska = MASK;
}
else {
......@@ -2817,6 +2819,10 @@ long_bitwise(PyLongObject *a,
}
if (b->ob_size < 0) {
b = (PyLongObject *) long_invert(b);
if (b == NULL) {
Py_DECREF(a);
return NULL;
}
maskb = MASK;
}
else {
......@@ -2868,7 +2874,7 @@ long_bitwise(PyLongObject *a,
: (maskb ? size_a : MIN(size_a, size_b)))
: MAX(size_a, size_b);
z = _PyLong_New(size_z);
if (a == NULL || b == NULL || z == NULL) {
if (z == NULL) {
Py_XDECREF(a);
Py_XDECREF(b);
Py_XDECREF(z);
......
......@@ -3276,7 +3276,7 @@ string_splitlines(PyStringObject *self, PyObject *args)
return list;
onError:
Py_DECREF(list);
Py_XDECREF(list);
return NULL;
}
......
......@@ -1876,16 +1876,16 @@ PyObject *PyUnicode_DecodeUnicodeEscape(const char *s,
message = "malformed \\N character escape";
if (ucnhash_CAPI == NULL) {
/* load the unicode data module */
PyObject *m, *v;
PyObject *m, *api;
m = PyImport_ImportModule("unicodedata");
if (m == NULL)
goto ucnhashError;
v = PyObject_GetAttrString(m, "ucnhash_CAPI");
api = PyObject_GetAttrString(m, "ucnhash_CAPI");
Py_DECREF(m);
if (v == NULL)
if (api == NULL)
goto ucnhashError;
ucnhash_CAPI = PyCObject_AsVoidPtr(v);
Py_DECREF(v);
ucnhash_CAPI = PyCObject_AsVoidPtr(api);
Py_DECREF(api);
if (ucnhash_CAPI == NULL)
goto ucnhashError;
}
......@@ -1945,6 +1945,7 @@ ucnhashError:
PyExc_UnicodeError,
"\\N escapes not supported (can't load unicodedata module)"
);
Py_XDECREF(v);
Py_XDECREF(errorHandler);
Py_XDECREF(exc);
return NULL;
......@@ -3962,7 +3963,7 @@ Py_ssize_t PyUnicode_Tailmatch(PyObject *str,
return -1;
substr = PyUnicode_FromObject(substr);
if (substr == NULL) {
Py_DECREF(substr);
Py_DECREF(str);
return -1;
}
......@@ -4429,7 +4430,7 @@ PyObject *PyUnicode_Splitlines(PyObject *string,
return list;
onError:
Py_DECREF(list);
Py_XDECREF(list);
Py_DECREF(string);
return NULL;
}
......@@ -6679,6 +6680,10 @@ formatlong(PyObject *val, int flags, int prec, int type)
if (!str)
return NULL;
result = _PyUnicode_New(len);
if (!result) {
Py_DECREF(str);
return NULL;
}
for (i = 0; i < len; i++)
result->str[i] = buf[i];
result->str[len] = 0;
......@@ -6865,7 +6870,7 @@ PyObject *PyUnicode_Format(PyObject *format,
rescnt = fmtcnt + 100;
reslen += rescnt;
if (_PyUnicode_Resize(&result, reslen) < 0)
return NULL;
goto onError;
res = PyUnicode_AS_UNICODE(result) + reslen - rescnt;
--rescnt;
}
......@@ -7163,6 +7168,7 @@ PyObject *PyUnicode_Format(PyObject *format,
rescnt = width + fmtcnt + 100;
reslen += rescnt;
if (reslen < 0) {
Py_XDECREF(temp);
Py_DECREF(result);
return PyErr_NoMemory();
}
......
......@@ -903,9 +903,16 @@ PyObject_ClearWeakRefs(PyObject *object)
}
}
else {
PyObject *tuple = PyTuple_New(count * 2);
PyObject *tuple;
Py_ssize_t i = 0;
tuple = PyTuple_New(count * 2);
if (tuple == NULL) {
if (restore_error)
PyErr_Fetch(&err_type, &err_value, &err_tb);
return;
}
for (i = 0; i < count; ++i) {
PyWeakReference *next = current->wr_next;
......
......@@ -107,4 +107,6 @@ calcfirstset(grammar *g, dfa *d)
}
printf(" }\n");
}
PyMem_FREE(sym);
}
......@@ -1438,6 +1438,8 @@ ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr)
}
/* extract Index values and put them in a Tuple */
elts = asdl_seq_new(asdl_seq_LEN(slices), c->c_arena);
if (!elts)
return NULL;
for (j = 0; j < asdl_seq_LEN(slices); ++j) {
slc = (slice_ty)asdl_seq_GET(slices, j);
assert(slc->kind == Index_kind && slc->v.Index.value);
......
......@@ -3477,8 +3477,11 @@ PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw)
{
PyObject *result;
if (arg == NULL)
if (arg == NULL) {
arg = PyTuple_New(0);
if (arg == NULL)
return NULL;
}
else if (!PyTuple_Check(arg)) {
PyErr_SetString(PyExc_TypeError,
"argument list must be a tuple");
......
......@@ -185,8 +185,12 @@ tb_displayline(PyObject *f, char *filename, int lineno, char *name)
}
PyOS_snprintf(linebuf, sizeof(linebuf), FMT, filename, lineno, name);
err = PyFile_WriteString(linebuf, f);
if (xfp == NULL || err != 0)
if (xfp == NULL)
return err;
else if (err != 0) {
fclose(xfp);
return err;
}
for (i = 0; i < lineno; i++) {
char* pLastChar = &linebuf[sizeof(linebuf)-2];
do {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment