diff options
| author | William S Fulton <wsf@fultondesigns.co.uk> | 2017-12-04 18:41:55 +0000 |
|---|---|---|
| committer | William S Fulton <wsf@fultondesigns.co.uk> | 2017-12-04 20:14:04 +0000 |
| commit | b0e29fbdf31bb94b11cb8a7cc830b4a76467afa3 (patch) | |
| tree | d12fcb6d577c3f389bc0ab85d84624b30d7f48f9 /Examples/python/multimap | |
| parent | 069ce1f6e9c9238b7ca6667d8272245a65b5c701 (diff) | |
| download | swig-b0e29fbdf31bb94b11cb8a7cc830b4a76467afa3.tar.gz | |
Add missing checks for failures in calls to PyUnicode_AsUTF8String.
Previously a seg fault could occur when passing invalid UTF8 strings (low
surrogates), eg passing u"\udcff" to the C layer (Python 3).
Diffstat (limited to 'Examples/python/multimap')
| -rw-r--r-- | Examples/python/multimap/example.i | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/Examples/python/multimap/example.i b/Examples/python/multimap/example.i index 66c0f74c6..3ff5d52c0 100644 --- a/Examples/python/multimap/example.i +++ b/Examples/python/multimap/example.i @@ -39,7 +39,11 @@ extern int gcd(int x, int y); %#if PY_VERSION_HEX >= 0x03000000 { PyObject *utf8str = PyUnicode_AsUTF8String(s); - const char *cstr = PyBytes_AsString(utf8str); + const char *cstr; + if (!utf8str) { + SWIG_fail; + } + cstr = PyBytes_AsString(utf8str); $2[i] = strdup(cstr); Py_DECREF(utf8str); } @@ -72,6 +76,9 @@ extern int gcdmain(int argc, char *argv[]); SWIG_fail; } utf8str = PyUnicode_AsUTF8String($input); + if (!utf8str) { + SWIG_fail; + } PyBytes_AsStringAndSize(utf8str, &cstr, &len); $1 = strncpy((char *)malloc(len+1), cstr, (size_t)len); $2 = (int)len; @@ -105,6 +112,9 @@ extern int count(char *bytes, int len, char c); char *cstr; Py_ssize_t len; PyObject *utf8str = PyUnicode_AsUTF8String($input); + if (!utf8str) { + SWIG_fail; + } PyBytes_AsStringAndSize(utf8str, &cstr, &len); $1 = strncpy((char *)malloc(len+1), cstr, (size_t)len); $2 = (int)len; |
