mirror of
https://github.com/python/cpython.git
synced 2026-10-28 10:25:05 +08:00
Fix unchecked NULL returns in several C modules (#160213)
This commit is contained in:
1 parent
e60a9da991
commit
a930e524cb
10 files changed
+58
-6
No files matched your search
@@ -4285,6 +4285,9 @@ _elementtree_XMLParser__setevents_impl(XMLParserObject *self,
|
||||
if (events_to_report == Py_None) {
|
||||
/* default is "end" only */
|
||||
self->end_event_obj = PyUnicode_FromString("end");
|
||||
if (self->end_event_obj == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
||||
@@ -962,6 +962,10 @@ _io__WindowsConsoleIO_readall_impl(winconsoleio *self)
|
||||
|
||||
bytes_size += _buflen(self);
|
||||
bytes = PyBytes_FromStringAndSize(NULL, bytes_size);
|
||||
if (bytes == NULL) {
|
||||
PyMem_Free(buf);
|
||||
return NULL;
|
||||
}
|
||||
rn = _copyfrombuf(self, PyBytes_AS_STRING(bytes), bytes_size);
|
||||
|
||||
if (len) {
|
||||
|
||||
@@ -2625,6 +2625,9 @@ get_crossinterp_data(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||
}
|
||||
else {
|
||||
mode = PyUnicode_AsUTF8(modeobj);
|
||||
if (mode == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
if (strlen(mode) == 0) {
|
||||
mode = "xidata";
|
||||
}
|
||||
|
||||
@@ -325,6 +325,10 @@ static int fuzz_sre_match(const char* data, size_t size) {
|
||||
|
||||
PyObject* pattern = compiled_patterns[idx];
|
||||
PyObject* match_callable = PyObject_GetAttrString(pattern, "match");
|
||||
if (match_callable == NULL) {
|
||||
Py_DECREF(to_match);
|
||||
return 0;
|
||||
}
|
||||
|
||||
PyObject* matches = PyObject_CallOneArg(match_callable, to_match);
|
||||
|
||||
|
||||
+5
-1
@@ -632,7 +632,11 @@ getpath_warn(PyObject *Py_UNUSED(self), PyObject *args)
|
||||
if (!PyArg_ParseTuple(args, "U", &msgobj)) {
|
||||
return NULL;
|
||||
}
|
||||
fprintf(stderr, "%s\n", PyUnicode_AsUTF8(msgobj));
|
||||
const char *msg = PyUnicode_AsUTF8(msgobj);
|
||||
if (msg == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
fprintf(stderr, "%s\n", msg);
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
||||
@@ -5675,8 +5675,9 @@ os__getvolumepathname_impl(PyObject *module, path_t *path)
|
||||
goto exit;
|
||||
}
|
||||
result = PyUnicode_FromWideChar(mountpath, -1);
|
||||
if (PyBytes_Check(path->object))
|
||||
if (result != NULL && PyBytes_Check(path->object)) {
|
||||
Py_SETREF(result, PyUnicode_EncodeFSDefault(result));
|
||||
}
|
||||
|
||||
exit:
|
||||
PyMem_Free(mountpath);
|
||||
|
||||
+13
-4
@@ -1508,10 +1508,19 @@ flex_complete(const char *text, int start, int end)
|
||||
|
||||
done:
|
||||
if (state) {
|
||||
Py_XDECREF(state->begidx);
|
||||
Py_XDECREF(state->endidx);
|
||||
state->begidx = PyLong_FromLong((long) start);
|
||||
state->endidx = PyLong_FromLong((long) end);
|
||||
PyObject *begidx = PyLong_FromLong((long) start);
|
||||
PyObject *endidx = PyLong_FromLong((long) end);
|
||||
if (begidx == NULL || endidx == NULL) {
|
||||
Py_XDECREF(begidx);
|
||||
Py_XDECREF(endidx);
|
||||
PyErr_FormatUnraisable("Exception ignored while preparing "
|
||||
"readline completion");
|
||||
rl_attempted_completion_over = 1;
|
||||
PyGILState_Release(gilstate);
|
||||
return NULL;
|
||||
}
|
||||
Py_XSETREF(state->begidx, begidx);
|
||||
Py_XSETREF(state->endidx, endidx);
|
||||
}
|
||||
result = completion_matches((char *)text, *on_completion);
|
||||
PyGILState_Release(gilstate);
|
||||
|
||||
@@ -1786,6 +1786,9 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto)
|
||||
PyObject *vmId = PyUnicode_FromWideChar(guidStr, -1);
|
||||
res = RpcStringFreeW(&guidStr);
|
||||
assert(res == RPC_S_OK);
|
||||
if (vmId == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
res = UuidToStringW(&a->ServiceId, &guidStr);
|
||||
if (res != RPC_S_OK) {
|
||||
|
||||
@@ -1225,8 +1225,16 @@ dtrace_function_entry(_PyInterpreterFrame *frame)
|
||||
int lineno;
|
||||
|
||||
PyCodeObject *code = _PyFrame_GetCode(frame);
|
||||
PyObject *exc = PyErr_GetRaisedException();
|
||||
filename = PyUnicode_AsUTF8(code->co_filename);
|
||||
funcname = PyUnicode_AsUTF8(code->co_name);
|
||||
PyErr_SetRaisedException(exc);
|
||||
if (filename == NULL) {
|
||||
filename = "<unknown>";
|
||||
}
|
||||
if (funcname == NULL) {
|
||||
funcname = "<unknown>";
|
||||
}
|
||||
lineno = PyUnstable_InterpreterFrame_GetLine(frame);
|
||||
|
||||
PyDTrace_FUNCTION_ENTRY(filename, funcname, lineno);
|
||||
@@ -1240,8 +1248,16 @@ dtrace_function_return(_PyInterpreterFrame *frame)
|
||||
int lineno;
|
||||
|
||||
PyCodeObject *code = _PyFrame_GetCode(frame);
|
||||
PyObject *exc = PyErr_GetRaisedException();
|
||||
filename = PyUnicode_AsUTF8(code->co_filename);
|
||||
funcname = PyUnicode_AsUTF8(code->co_name);
|
||||
PyErr_SetRaisedException(exc);
|
||||
if (filename == NULL) {
|
||||
filename = "<unknown>";
|
||||
}
|
||||
if (funcname == NULL) {
|
||||
funcname = "<unknown>";
|
||||
}
|
||||
lineno = PyUnstable_InterpreterFrame_GetLine(frame);
|
||||
|
||||
PyDTrace_FUNCTION_RETURN(filename, funcname, lineno);
|
||||
|
||||
@@ -664,6 +664,11 @@ check_missing___main___attr(PyObject *exc)
|
||||
}
|
||||
}
|
||||
const char *err = PyUnicode_AsUTF8(msgobj);
|
||||
if (err == NULL) {
|
||||
PyErr_Clear();
|
||||
Py_DECREF(msgobj);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Check if it's a missing __main__ attr.
|
||||
int cmp = strncmp(err, "module '__main__' has no attribute '", 36);
|
||||
|
||||
Reference in new issue
Block a user