mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-36301: Error if decoding pybuilddir.txt fails (GH-12422)
Python initialization now fails if decoding pybuilddir.txt configuration file fails at startup. _PyPathConfig_Calculate() now reports memory allocation failure and decoding error on decoding pybuilddir.txt content from UTF-8/surrogateescape.
This commit is contained in:
parent
7b14f0c02c
commit
5f9cf23502
5 changed files with 32 additions and 16 deletions
|
@ -563,23 +563,27 @@ search_for_exec_prefix(const _PyCoreConfig *core_config,
|
|||
}
|
||||
else {
|
||||
char buf[MAXPATHLEN+1];
|
||||
wchar_t *rel_builddir_path;
|
||||
n = fread(buf, 1, MAXPATHLEN, f);
|
||||
buf[n] = '\0';
|
||||
fclose(f);
|
||||
rel_builddir_path = _Py_DecodeUTF8_surrogateescape(buf, n);
|
||||
if (rel_builddir_path) {
|
||||
wcsncpy(exec_prefix, calculate->argv0_path, MAXPATHLEN);
|
||||
exec_prefix[MAXPATHLEN] = L'\0';
|
||||
err = joinpath(exec_prefix, rel_builddir_path);
|
||||
PyMem_RawFree(rel_builddir_path );
|
||||
if (_Py_INIT_FAILED(err)) {
|
||||
return err;
|
||||
}
|
||||
|
||||
*found = -1;
|
||||
return _Py_INIT_OK();
|
||||
size_t dec_len;
|
||||
wchar_t *pybuilddir;
|
||||
pybuilddir = _Py_DecodeUTF8_surrogateescape(buf, n, &dec_len);
|
||||
if (!pybuilddir) {
|
||||
return DECODE_LOCALE_ERR("pybuilddir.txt", dec_len);
|
||||
}
|
||||
|
||||
wcsncpy(exec_prefix, calculate->argv0_path, MAXPATHLEN);
|
||||
exec_prefix[MAXPATHLEN] = L'\0';
|
||||
err = joinpath(exec_prefix, pybuilddir);
|
||||
PyMem_RawFree(pybuilddir );
|
||||
if (_Py_INIT_FAILED(err)) {
|
||||
return err;
|
||||
}
|
||||
|
||||
*found = -1;
|
||||
return _Py_INIT_OK();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue