From ace8fcd97248dccc7bbd3b94185a49142320eda0 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Tue, 2 Jul 2013 18:47:00 +0100 Subject: [PATCH] SWIG_AsWCharPtrAndSize improper operation if cptr NULL SF bug #1327 This doesn't have any noticeable effect with the usage of SWIG_AsWCharPtrAndSize as shipped by SWIG, but could be a problem if a user is using this function with cptr equal to zero and psize is non-zero - the length would be incorrectly set due to the call to PyUnicode_GetSize failing. --- Examples/test-suite/li_std_wstring.i | 8 ++++++++ Examples/test-suite/python/li_std_wstring_runme.py | 6 ++++++ Lib/python/pywstrings.swg | 4 +--- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Examples/test-suite/li_std_wstring.i b/Examples/test-suite/li_std_wstring.i index c809e11ec..e0ecde53b 100644 --- a/Examples/test-suite/li_std_wstring.i +++ b/Examples/test-suite/li_std_wstring.i @@ -38,6 +38,14 @@ wchar_t* test_cvalue(wchar_t* x) { } +wchar_t* test_wchar_overload() { + return 0; +} + +wchar_t* test_wchar_overload(wchar_t *x) { + return x; +} + std::wstring test_value(std::wstring x) { return x; } diff --git a/Examples/test-suite/python/li_std_wstring_runme.py b/Examples/test-suite/python/li_std_wstring_runme.py index a2d419a0a..fecc527e0 100644 --- a/Examples/test-suite/python/li_std_wstring_runme.py +++ b/Examples/test-suite/python/li_std_wstring_runme.py @@ -13,6 +13,12 @@ if li_std_wstring.test_ccvalue(x) != x: if li_std_wstring.test_cvalue(x) != x: raise RuntimeError("bad string mapping") +if li_std_wstring.test_wchar_overload(x) != x: + raise RuntimeError("bad string mapping") + +if li_std_wstring.test_wchar_overload("not unicode") != "not unicode": + raise RuntimeError("bad string mapping") + if li_std_wstring.test_value(x) != x: print x, li_std_wstring.test_value(x) raise RuntimeError("bad string mapping") diff --git a/Lib/python/pywstrings.swg b/Lib/python/pywstrings.swg index 619bdd555..864376b01 100644 --- a/Lib/python/pywstrings.swg +++ b/Lib/python/pywstrings.swg @@ -18,9 +18,7 @@ SWIG_AsWCharPtrAndSize(PyObject *obj, wchar_t **cptr, size_t *psize, int *alloc) int isunicode = PyUnicode_Check(obj); %#if PY_VERSION_HEX < 0x03000000 if (!isunicode && PyString_Check(obj)) { - if (cptr) { - obj = tmp = PyUnicode_FromObject(obj); - } + obj = tmp = PyUnicode_FromObject(obj); isunicode = 1; } %#endif