https://github.com/python/cpython/commit/74c4e35ff1b1b020d530a239f8ddadf318472a1a
commit: 74c4e35ff1b1b020d530a239f8ddadf318472a1a
branch: main
author: Max Bachmann <[email protected]>
committer: zooba <[email protected]>
date: 2025-05-15T11:56:50Z
summary:
Let PyUnicode_FromWideChar calculate the input length (GH-134045)
files:
M Modules/_ctypes/callproc.c
M Modules/_ctypes/cfield.c
M Modules/_winapi.c
M Modules/main.c
M Modules/posixmodule.c
M PC/winreg.c
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
index 404178ca623a93..9f5ad9f57b75e2 100644
--- a/Modules/_ctypes/callproc.c
+++ b/Modules/_ctypes/callproc.c
@@ -1389,7 +1389,7 @@ static PyObject *format_error(PyObject *self, PyObject
*args)
code = GetLastError();
lpMsgBuf = FormatError(code);
if (lpMsgBuf) {
- result = PyUnicode_FromWideChar(lpMsgBuf, wcslen(lpMsgBuf));
+ result = PyUnicode_FromWideChar(lpMsgBuf, -1);
LocalFree(lpMsgBuf);
} else {
result = PyUnicode_FromString("<no description>");
diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c
index 86bcc805360a3f..163b92642615e5 100644
--- a/Modules/_ctypes/cfield.c
+++ b/Modules/_ctypes/cfield.c
@@ -1253,7 +1253,7 @@ Z_get(void *ptr, Py_ssize_t size)
wchar_t *p;
p = *(wchar_t **)ptr;
if (p) {
- return PyUnicode_FromWideChar(p, wcslen(p));
+ return PyUnicode_FromWideChar(p, -1);
} else {
Py_RETURN_NONE;
}
diff --git a/Modules/_winapi.c b/Modules/_winapi.c
index 0dea8d5ef172f9..044505fab6216c 100644
--- a/Modules/_winapi.c
+++ b/Modules/_winapi.c
@@ -1633,7 +1633,7 @@ _winapi_GetModuleFileName_impl(PyObject *module, HMODULE
module_handle)
if (! result)
return PyErr_SetFromWindowsErr(GetLastError());
- return PyUnicode_FromWideChar(filename, wcslen(filename));
+ return PyUnicode_FromWideChar(filename, -1);
}
#if defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_SYSTEM)
diff --git a/Modules/main.c b/Modules/main.c
index ea1239ecc57f00..2be194bdadf7d0 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -128,7 +128,7 @@ pymain_get_importer(const wchar_t *filename, PyObject
**importer_p, int *exitcod
{
PyObject *sys_path0 = NULL, *importer;
- sys_path0 = PyUnicode_FromWideChar(filename, wcslen(filename));
+ sys_path0 = PyUnicode_FromWideChar(filename, -1);
if (sys_path0 == NULL) {
goto error;
}
@@ -328,7 +328,7 @@ pymain_run_module(const wchar_t *modname, int set_argv0)
fprintf(stderr, "Could not import runpy._run_module_as_main\n");
return pymain_exit_err_print();
}
- module = PyUnicode_FromWideChar(modname, wcslen(modname));
+ module = PyUnicode_FromWideChar(modname, -1);
if (module == NULL) {
fprintf(stderr, "Could not convert module name to unicode\n");
Py_DECREF(runmodule);
@@ -439,7 +439,7 @@ pymain_run_startup(PyConfig *config, int *exitcode)
if (env == NULL || env[0] == L'\0') {
return 0;
}
- startup = PyUnicode_FromWideChar(env, wcslen(env));
+ startup = PyUnicode_FromWideChar(env, -1);
if (startup == NULL) {
goto error;
}
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index bb3bfe802b93e8..588894adeac811 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1782,7 +1782,7 @@ convertenviron(void)
return NULL;
}
#ifdef MS_WINDOWS
- v = PyUnicode_FromWideChar(p+1, wcslen(p+1));
+ v = PyUnicode_FromWideChar(p+1, -1);
#else
v = PyBytes_FromStringAndSize(p+1, strlen(p+1));
#endif
@@ -5052,7 +5052,7 @@ os__getfullpathname_impl(PyObject *module, path_t *path)
return PyErr_NoMemory();
}
- PyObject *str = PyUnicode_FromWideChar(abspath, wcslen(abspath));
+ PyObject *str = PyUnicode_FromWideChar(abspath, -1);
PyMem_RawFree(abspath);
if (str == NULL) {
return NULL;
@@ -5168,7 +5168,7 @@ os__findfirstfile_impl(PyObject *module, path_t *path)
}
wRealFileName = wFileData.cFileName;
- result = PyUnicode_FromWideChar(wRealFileName, wcslen(wRealFileName));
+ result = PyUnicode_FromWideChar(wRealFileName, -1);
FindClose(hFindFile);
return result;
}
@@ -5212,7 +5212,7 @@ os__getvolumepathname_impl(PyObject *module, path_t *path)
result = win32_error_object("_getvolumepathname", path->object);
goto exit;
}
- result = PyUnicode_FromWideChar(mountpath, wcslen(mountpath));
+ result = PyUnicode_FromWideChar(mountpath, -1);
if (PyBytes_Check(path->object))
Py_SETREF(result, PyUnicode_EncodeFSDefault(result));
diff --git a/PC/winreg.c b/PC/winreg.c
index c0de5c1353a349..a8e2e4cc10c882 100644
--- a/PC/winreg.c
+++ b/PC/winreg.c
@@ -1290,7 +1290,7 @@ winreg_ExpandEnvironmentStrings_impl(PyObject *module,
const wchar_t *string)
return PyErr_SetFromWindowsErrWithFunction(retValueSize,
"ExpandEnvironmentStrings");
}
- o = PyUnicode_FromWideChar(retValue, wcslen(retValue));
+ o = PyUnicode_FromWideChar(retValue, -1);
PyMem_Free(retValue);
return o;
}
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]