From a85998af7c44c047cb4e35cfa8373330e3f45088 Mon Sep 17 00:00:00 2001 From: Alexandre Vassalotti Date: Sat, 3 May 2008 18:24:43 +0000 Subject: Issue #1950: Fixed misusage of PyUnicode_AsString(). --- Python/structmember.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'Python/structmember.c') diff --git a/Python/structmember.c b/Python/structmember.c index 769acfcdcf..6c1e932963 100644 --- a/Python/structmember.c +++ b/Python/structmember.c @@ -239,15 +239,22 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v) *(PyObject **)addr = v; Py_XDECREF(oldv); break; - case T_CHAR: - if (PyUnicode_Check(v) && PyUnicode_GetSize(v) == 1) { - *(char*)addr = PyUnicode_AsString(v)[0]; + case T_CHAR: { + char *string; + Py_ssize_t len; + + if (!PyUnicode_Check(v)) { + PyErr_BadArgument(); + return -1; } - else { + string = PyUnicode_AsStringAndSize(v, &len); + if (len != 1) { PyErr_BadArgument(); return -1; } + *(char*)addr = string[0]; break; + } #ifdef HAVE_LONG_LONG case T_LONGLONG:{ PY_LONG_LONG value; -- cgit v1.2.1