mirror of
https://github.com/python/cpython.git
synced 2025-07-15 23:35:23 +00:00
bpo-34523, bpo-35322: Fix unicode_encode_locale() (GH-10759)
Fix memory leak in PyUnicode_EncodeLocale() and PyUnicode_EncodeFSDefault() on error handling. Changes: * Fix unicode_encode_locale() error handling * Fix test_codecs.LocaleCodecTest
This commit is contained in:
parent
a22df4896f
commit
bde9d6bbb4
3 changed files with 19 additions and 9 deletions
|
@ -3449,10 +3449,9 @@ unicode_encode_locale(PyObject *unicode, const char *errors,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
Py_ssize_t wlen2 = wcslen(wstr);
|
||||
if (wlen2 != wlen) {
|
||||
PyMem_Free(wstr);
|
||||
if ((size_t)wlen != wcslen(wstr)) {
|
||||
PyErr_SetString(PyExc_ValueError, "embedded null character");
|
||||
PyMem_Free(wstr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -3461,6 +3460,8 @@ unicode_encode_locale(PyObject *unicode, const char *errors,
|
|||
const char *reason;
|
||||
int res = _Py_EncodeLocaleEx(wstr, &str, &error_pos, &reason,
|
||||
current_locale, error_handler);
|
||||
PyMem_Free(wstr);
|
||||
|
||||
if (res != 0) {
|
||||
if (res == -2) {
|
||||
PyObject *exc;
|
||||
|
@ -3473,18 +3474,15 @@ unicode_encode_locale(PyObject *unicode, const char *errors,
|
|||
PyCodec_StrictErrors(exc);
|
||||
Py_DECREF(exc);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
else if (res == -3) {
|
||||
PyErr_SetString(PyExc_ValueError, "unsupported error handler");
|
||||
}
|
||||
else {
|
||||
PyErr_NoMemory();
|
||||
PyMem_Free(wstr);
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
PyMem_Free(wstr);
|
||||
|
||||
PyObject *bytes = PyBytes_FromString(str);
|
||||
PyMem_RawFree(str);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue