[Python-checkins] cpython: Issue #26312: SystemError is now raised in all programming bugs with using

serhiy.storchaka python-checkins at python.org
Thu Feb 11 05:42:17 EST 2016


https://hg.python.org/cpython/rev/c7eff18f3840
changeset:   100222:c7eff18f3840
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Thu Feb 11 12:41:40 2016 +0200
summary:
  Issue #26312: SystemError is now raised in all programming bugs with using
PyArg_ParseTupleAndKeywords().  RuntimeError did raised before in some
programming bugs.

files:
  Lib/test/test_capi.py |   4 ++--
  Misc/NEWS             |   4 ++++
  Python/getargs.c      |  12 ++++++------
  3 files changed, 12 insertions(+), 8 deletions(-)


diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -491,7 +491,7 @@
             except SystemError as e:
                 s = "argument 1 (impossible<bad format char>)"
                 when_not_skipped = (str(e) == s)
-            except (TypeError, RuntimeError):
+            except TypeError:
                 when_not_skipped = False
 
             # test the format unit when skipped
@@ -500,7 +500,7 @@
                 _testcapi.parse_tuple_and_keywords(empty_tuple, dict_b,
                     optional_format.encode("ascii"), keywords)
                 when_skipped = False
-            except RuntimeError as e:
+            except SystemError as e:
                 s = "impossible<bad format char>: '{}'".format(format)
                 when_skipped = (str(e) == s)
 
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -741,6 +741,10 @@
 C API
 -----
 
+- Issue #26312: SystemError is now raised in all programming bugs with using
+  PyArg_ParseTupleAndKeywords().  RuntimeError did raised before in some
+  programming bugs.
+
 - Issue #26198: ValueError is now raised instead of TypeError on buffer
   overflow in parsing "es#" and "et#" format units.  SystemError is now raised
   instead of TypeError on programmical error in parsing format string.
diff --git a/Python/getargs.c b/Python/getargs.c
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -1512,7 +1512,7 @@
         keyword = kwlist[i];
         if (*format == '|') {
             if (min != INT_MAX) {
-                PyErr_SetString(PyExc_RuntimeError,
+                PyErr_SetString(PyExc_SystemError,
                                 "Invalid format string (| specified twice)");
                 return cleanreturn(0, &freelist);
             }
@@ -1521,14 +1521,14 @@
             format++;
 
             if (max != INT_MAX) {
-                PyErr_SetString(PyExc_RuntimeError,
+                PyErr_SetString(PyExc_SystemError,
                                 "Invalid format string ($ before |)");
                 return cleanreturn(0, &freelist);
             }
         }
         if (*format == '$') {
             if (max != INT_MAX) {
-                PyErr_SetString(PyExc_RuntimeError,
+                PyErr_SetString(PyExc_SystemError,
                                 "Invalid format string ($ specified twice)");
                 return cleanreturn(0, &freelist);
             }
@@ -1546,7 +1546,7 @@
             }
         }
         if (IS_END_OF_FORMAT(*format)) {
-            PyErr_Format(PyExc_RuntimeError,
+            PyErr_Format(PyExc_SystemError,
                          "More keyword list entries (%d) than "
                          "format specifiers (%d)", len, i);
             return cleanreturn(0, &freelist);
@@ -1598,14 +1598,14 @@
          * keyword args */
         msg = skipitem(&format, p_va, flags);
         if (msg) {
-            PyErr_Format(PyExc_RuntimeError, "%s: '%s'", msg,
+            PyErr_Format(PyExc_SystemError, "%s: '%s'", msg,
                          format);
             return cleanreturn(0, &freelist);
         }
     }
 
     if (!IS_END_OF_FORMAT(*format) && (*format != '|') && (*format != '$')) {
-        PyErr_Format(PyExc_RuntimeError,
+        PyErr_Format(PyExc_SystemError,
             "more argument specifiers than keyword list entries "
             "(remaining format:'%s')", format);
         return cleanreturn(0, &freelist);

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list