mirror of
https://github.com/python/cpython.git
synced 2025-07-07 11:25:30 +00:00
gh-135855: Raise TypeError When Passing Non-dict Object to _interpreters.set___main___attrs
(gh-135856)
Some checks are pending
Tests / (push) Blocked by required conditions
Tests / Windows MSI (push) Blocked by required conditions
Tests / Change detection (push) Waiting to run
Tests / Docs (push) Blocked by required conditions
Tests / Check if Autoconf files are up to date (push) Blocked by required conditions
Tests / Check if generated files are up to date (push) Blocked by required conditions
Tests / Ubuntu SSL tests with OpenSSL (push) Blocked by required conditions
Tests / WASI (push) Blocked by required conditions
Tests / Hypothesis tests on Ubuntu (push) Blocked by required conditions
Tests / Address sanitizer (push) Blocked by required conditions
Tests / Undefined behavior sanitizer (push) Blocked by required conditions
Tests / Cross build Linux (push) Blocked by required conditions
Tests / CIFuzz (push) Blocked by required conditions
Tests / All required checks pass (push) Blocked by required conditions
Lint / lint (push) Waiting to run
mypy / Run mypy on Lib/_pyrepl (push) Waiting to run
mypy / Run mypy on Lib/test/libregrtest (push) Waiting to run
mypy / Run mypy on Lib/tomllib (push) Waiting to run
mypy / Run mypy on Tools/build (push) Waiting to run
mypy / Run mypy on Tools/cases_generator (push) Waiting to run
mypy / Run mypy on Tools/clinic (push) Waiting to run
mypy / Run mypy on Tools/jit (push) Waiting to run
mypy / Run mypy on Tools/peg_generator (push) Waiting to run
Some checks are pending
Tests / (push) Blocked by required conditions
Tests / Windows MSI (push) Blocked by required conditions
Tests / Change detection (push) Waiting to run
Tests / Docs (push) Blocked by required conditions
Tests / Check if Autoconf files are up to date (push) Blocked by required conditions
Tests / Check if generated files are up to date (push) Blocked by required conditions
Tests / Ubuntu SSL tests with OpenSSL (push) Blocked by required conditions
Tests / WASI (push) Blocked by required conditions
Tests / Hypothesis tests on Ubuntu (push) Blocked by required conditions
Tests / Address sanitizer (push) Blocked by required conditions
Tests / Undefined behavior sanitizer (push) Blocked by required conditions
Tests / Cross build Linux (push) Blocked by required conditions
Tests / CIFuzz (push) Blocked by required conditions
Tests / All required checks pass (push) Blocked by required conditions
Lint / lint (push) Waiting to run
mypy / Run mypy on Lib/_pyrepl (push) Waiting to run
mypy / Run mypy on Lib/test/libregrtest (push) Waiting to run
mypy / Run mypy on Lib/tomllib (push) Waiting to run
mypy / Run mypy on Tools/build (push) Waiting to run
mypy / Run mypy on Tools/cases_generator (push) Waiting to run
mypy / Run mypy on Tools/clinic (push) Waiting to run
mypy / Run mypy on Tools/jit (push) Waiting to run
mypy / Run mypy on Tools/peg_generator (push) Waiting to run
This commit is contained in:
parent
fea5ccc55d
commit
4e6f0d116e
4 changed files with 29 additions and 12 deletions
|
@ -485,6 +485,21 @@ class CommonTests(TestBase):
|
|||
msg = r'_interpreters.run_func\(\) argument 3 must be dict, not int'
|
||||
with self.assertRaisesRegex(TypeError, msg):
|
||||
_interpreters.run_func(self.id, lambda: None, shared=1)
|
||||
# See https://github.com/python/cpython/issues/135855
|
||||
msg = r'_interpreters.set___main___attrs\(\) argument 2 must be dict, not int'
|
||||
with self.assertRaisesRegex(TypeError, msg):
|
||||
_interpreters.set___main___attrs(self.id, 1)
|
||||
|
||||
def test_invalid_shared_none(self):
|
||||
msg = r'must be dict, not None'
|
||||
with self.assertRaisesRegex(TypeError, msg):
|
||||
_interpreters.exec(self.id, 'a', shared=None)
|
||||
with self.assertRaisesRegex(TypeError, msg):
|
||||
_interpreters.run_string(self.id, 'a', shared=None)
|
||||
with self.assertRaisesRegex(TypeError, msg):
|
||||
_interpreters.run_func(self.id, lambda: None, shared=None)
|
||||
with self.assertRaisesRegex(TypeError, msg):
|
||||
_interpreters.set___main___attrs(self.id, None)
|
||||
|
||||
def test_invalid_shared_encoding(self):
|
||||
# See https://github.com/python/cpython/issues/127196
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
Raise :exc:`TypeError` instead of :exc:`SystemError` when
|
||||
:func:`!_interpreters.set___main___attrs` is passed a non-dict object.
|
||||
Patch by Brian Schubert.
|
|
@ -1039,8 +1039,8 @@ interp_set___main___attrs(PyObject *self, PyObject *args, PyObject *kwargs)
|
|||
PyObject *id, *updates;
|
||||
int restricted = 0;
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
||||
"OO|$p:" MODULE_NAME_STR ".set___main___attrs",
|
||||
kwlist, &id, &updates, &restricted))
|
||||
"OO!|$p:" MODULE_NAME_STR ".set___main___attrs",
|
||||
kwlist, &id, &PyDict_Type, &updates, &restricted))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1054,16 +1054,14 @@ interp_set___main___attrs(PyObject *self, PyObject *args, PyObject *kwargs)
|
|||
}
|
||||
|
||||
// Check the updates.
|
||||
if (updates != Py_None) {
|
||||
Py_ssize_t size = PyObject_Size(updates);
|
||||
if (size < 0) {
|
||||
return NULL;
|
||||
}
|
||||
if (size == 0) {
|
||||
PyErr_SetString(PyExc_ValueError,
|
||||
"arg 2 must be a non-empty mapping");
|
||||
return NULL;
|
||||
}
|
||||
Py_ssize_t size = PyDict_Size(updates);
|
||||
if (size < 0) {
|
||||
return NULL;
|
||||
}
|
||||
if (size == 0) {
|
||||
PyErr_SetString(PyExc_ValueError,
|
||||
"arg 2 must be a non-empty dict");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
_PyXI_session *session = _PyXI_NewSession();
|
||||
|
|
|
@ -2617,6 +2617,7 @@ _PyXI_Enter(_PyXI_session *session,
|
|||
// Convert the attrs for cross-interpreter use.
|
||||
_PyXI_namespace *sharedns = NULL;
|
||||
if (nsupdates != NULL) {
|
||||
assert(PyDict_Check(nsupdates));
|
||||
Py_ssize_t len = PyDict_Size(nsupdates);
|
||||
if (len < 0) {
|
||||
if (result != NULL) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue