mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
SF #1444030: Fix several potential defects found by Coverity.
(reviewed by Neal Norwitz)
This commit is contained in:
parent
ef1701f7d3
commit
4af5c8cee4
11 changed files with 53 additions and 17 deletions
|
@ -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,8 +903,15 @@ 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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue