mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +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'
|
msg = r'_interpreters.run_func\(\) argument 3 must be dict, not int'
|
||||||
with self.assertRaisesRegex(TypeError, msg):
|
with self.assertRaisesRegex(TypeError, msg):
|
||||||
_interpreters.run_func(self.id, lambda: None, shared=1)
|
_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):
|
def test_invalid_shared_encoding(self):
|
||||||
# See https://github.com/python/cpython/issues/127196
|
# 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;
|
PyObject *id, *updates;
|
||||||
int restricted = 0;
|
int restricted = 0;
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
||||||
"OO|$p:" MODULE_NAME_STR ".set___main___attrs",
|
"OO!|$p:" MODULE_NAME_STR ".set___main___attrs",
|
||||||
kwlist, &id, &updates, &restricted))
|
kwlist, &id, &PyDict_Type, &updates, &restricted))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1054,16 +1054,14 @@ interp_set___main___attrs(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the updates.
|
// Check the updates.
|
||||||
if (updates != Py_None) {
|
Py_ssize_t size = PyDict_Size(updates);
|
||||||
Py_ssize_t size = PyObject_Size(updates);
|
if (size < 0) {
|
||||||
if (size < 0) {
|
return NULL;
|
||||||
return NULL;
|
}
|
||||||
}
|
if (size == 0) {
|
||||||
if (size == 0) {
|
PyErr_SetString(PyExc_ValueError,
|
||||||
PyErr_SetString(PyExc_ValueError,
|
"arg 2 must be a non-empty dict");
|
||||||
"arg 2 must be a non-empty mapping");
|
return NULL;
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_PyXI_session *session = _PyXI_NewSession();
|
_PyXI_session *session = _PyXI_NewSession();
|
||||||
|
|
|
@ -2617,6 +2617,7 @@ _PyXI_Enter(_PyXI_session *session,
|
||||||
// Convert the attrs for cross-interpreter use.
|
// Convert the attrs for cross-interpreter use.
|
||||||
_PyXI_namespace *sharedns = NULL;
|
_PyXI_namespace *sharedns = NULL;
|
||||||
if (nsupdates != NULL) {
|
if (nsupdates != NULL) {
|
||||||
|
assert(PyDict_Check(nsupdates));
|
||||||
Py_ssize_t len = PyDict_Size(nsupdates);
|
Py_ssize_t len = PyDict_Size(nsupdates);
|
||||||
if (len < 0) {
|
if (len < 0) {
|
||||||
if (result != NULL) {
|
if (result != NULL) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue