| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,3 @@ | |||
| 1 | + Harden :mod:`pyexpat` error handling during module initialisation to prevent | ||
| 2 | + exceptions from possibly being overwritten, and objects from being | ||
| 3 | + dereferenced twice. | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1768,14 +1768,18 @@ add_error(PyObject *errors_module, PyObject *codes_dict, | |||
| 1768 | 1768 | static int | |
| 1769 | 1769 | add_errors_module(PyObject *mod) | |
| 1770 | 1770 | { | |
| 1771 | + // add_submodule() returns a borrowed ref. | ||
| 1771 | 1772 | PyObject *errors_module = add_submodule(mod, MODULE_NAME ".errors"); | |
| 1772 | 1773 | if (errors_module == NULL) { | |
| 1773 | 1774 | return -1; | |
| 1774 | 1775 | } | |
| 1775 | 1776 | ||
| 1776 | 1777 | PyObject *codes_dict = PyDict_New(); | |
| 1778 | + if (codes_dict == NULL) { | ||
| 1779 | + return -1; | ||
| 1780 | + } | ||
| 1777 | 1781 | PyObject *rev_codes_dict = PyDict_New(); | |
| 1778 | - if (codes_dict == NULL || rev_codes_dict == NULL) { | ||
| 1782 | + if (rev_codes_dict == NULL) { | ||
| 1779 | 1783 | goto error; | |
| 1780 | 1784 | } | |
| 1781 | 1785 | ||
@@ -1796,19 +1800,17 @@ add_errors_module(PyObject *mod) | |||
| 1796 | 1800 | goto error; | |
| 1797 | 1801 | } | |
| 1798 | 1802 | ||
| 1799 | - Py_INCREF(codes_dict); | ||
| 1800 | - if (PyModule_AddObject(errors_module, "codes", codes_dict) < 0) { | ||
| 1801 | - Py_DECREF(codes_dict); | ||
| 1803 | + int rc = PyModule_AddObjectRef(errors_module, "codes", codes_dict); | ||
| 1804 | + Py_CLEAR(codes_dict); | ||
| 1805 | + if (rc < 0) { | ||
| 1802 | 1806 | goto error; | |
| 1803 | 1807 | } | |
| 1804 | - Py_CLEAR(codes_dict); | ||
| 1805 | 1808 | ||
| 1806 | - Py_INCREF(rev_codes_dict); | ||
| 1807 | - if (PyModule_AddObject(errors_module, "messages", rev_codes_dict) < 0) { | ||
| 1808 | - Py_DECREF(rev_codes_dict); | ||
| 1809 | + rc = PyModule_AddObjectRef(errors_module, "messages", rev_codes_dict); | ||
| 1810 | + Py_CLEAR(rev_codes_dict); | ||
| 1811 | + if (rc < 0) { | ||
| 1809 | 1812 | goto error; | |
| 1810 | 1813 | } | |
| 1811 | - Py_CLEAR(rev_codes_dict); | ||
| 1812 | 1814 | ||
| 1813 | 1815 | return 0; | |
| 1814 | 1816 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments