This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2011年12月17日 03:53 by vstinner, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| embedded_nul.patch | vstinner, 2011年12月17日 03:53 | review | ||
| doc_unicode.patch | arnaudc, 2011年12月18日 17:04 | added warnings to concerned functions | ||
| doc_unicode-2.patch | arnaudc, 2011年12月18日 18:08 | |||
| embedded_nul-2.patch | vstinner, 2011年12月18日 20:11 | review | ||
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 2302 | merged | serhiy.storchaka, 2017年06月20日 15:39 | |
| PR 2462 | merged | serhiy.storchaka, 2017年06月28日 05:35 | |
| PR 2463 | merged | serhiy.storchaka, 2017年06月28日 05:46 | |
| PR 2464 | merged | serhiy.storchaka, 2017年06月28日 06:26 | |
| Messages (22) | |||
|---|---|---|---|
| msg149656 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2011年12月17日 03:53 | |
The curses module (only since Python 3.3), locale.strcoll(), locale.strxfrm(), time.strftime() and imp.NullImporter() (only on Windows) accept embedded null characters, whereas they convert the Unicode string to a wide character (wchar_t*) string.
The problem is that the null character truncates the string. Example:
>>> locale.strxfrm('a')
'a'
>>> locale.strxfrm('a0円b')
'a'
Attached patch fixes these functions. I wrote the patch for Python 3.3.
|
|||
| msg149657 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2011年12月17日 03:56 | |
PyUnicode_AsWideCharString() documentation should also warn about this issue. |
|||
| msg149783 - (view) | Author: Arnaud Calmettes (arnaudc) | Date: 2011年12月18日 17:04 | |
Here is a patch for the documentation. I added warnings for, PyUnicode_AsWideChar*, PyUnicode_EncodeFSDefault and PyUnicode_AsUnicode*, since they're all concerned by this issue. |
|||
| msg149787 - (view) | Author: Arnaud Calmettes (arnaudc) | Date: 2011年12月18日 18:08 | |
I removed the hints "using wcslen on the result of PyUnicode_AsWideChar*", since the resulting wchar_t strings may not be null-terminated |
|||
| msg149791 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2011年12月18日 18:29 | |
New changeset fa5c8cf29963 by Victor Stinner in branch '3.2': Issue #13617: Document that the result of the conversion of a Unicode object to http://hg.python.org/cpython/rev/fa5c8cf29963 New changeset f30ac7729f2b by Victor Stinner in branch 'default': Issue #13617: Document that the result of the conversion of a Unicode object to http://hg.python.org/cpython/rev/f30ac7729f2b |
|||
| msg149794 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2011年12月18日 18:38 | |
New changeset 1c4d9534263e by Victor Stinner in branch '2.7': Issue #13617: Document that the result PyUnicode_AsUnicode() and http://hg.python.org/cpython/rev/1c4d9534263e |
|||
| msg149802 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2011年12月18日 20:11 | |
embedded_nul-2.patch: a more complete patch check also null byte in functions calling PyUnicode_EncodeFSDefault(). |
|||
| msg173147 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2012年10月17日 09:11 | |
I added some comments in Rietveld. I see other instances of the use of non-checked PyUnicode_AsWideCharString() and PyUnicode_AsUnicode(). |
|||
| msg221844 - (view) | Author: Mark Lawrence (BreamoreBoy) * | Date: 2014年06月29日 13:45 | |
@Victor can you pick this up again please. |
|||
| msg226414 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2014年09月05日 09:51 | |
Could you please answer my comments Victor? |
|||
| msg236699 - (view) | Author: Ben Hoyt (benhoyt) * | Date: 2015年02月26日 19:21 | |
Note that this (or a very similar issue) also affects os.listdir() on Windows: os.listdir(bytes_path_with_nul) raises ValueError as expected, but os.listdir(unicode_path_with_nul) does not. Test case:
>>> import os
>>> os.mkdir('foo')
>>> os.listdir(b'foo\x00zzz')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: listdir: embedded null character in path
>>> os.listdir('foo\x00zzz')
[]
However, this is not the case on Linux, as there both calls raise an appropriate ValueError.
This needs to be fixed in posixmodule.c's path_converter() function.
I'm in the middle of implementing PEP 471 (os.scandir), so don't want to create a proper patch right now, but the fix is to add these lines in posixmodule.c path_converter() after the if (length > 32767) {...} block:
if ((size_t)length != wcslen(wide)) {
FORMAT_EXCEPTION(PyExc_ValueError, "embedded null character in %s");
Py_DECREF(unicode);
return 0;
}
We should also add test to test_os.py like the following:
def test_listdir_nul_in_path(self):
self.assertRaises(ValueError, os.listdir, 'y\x00z')
self.assertRaises(ValueError, os.listdir, b'y\x00z')
|
|||
| msg296241 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2017年06月17日 14:59 | |
Could you update your patch Victor? |
|||
| msg296332 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2017年06月19日 13:30 | |
Sorry, I lost track of this issue. Feel free to update and complete my patch :-) |
|||
| msg296461 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2017年06月20日 15:42 | |
PR 2302 doesn't fix all issues with PyUnicode_AsWideCharString(). Issue30708 should fix them. |
|||
| msg296512 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2017年06月21日 04:33 | |
While working on this issue I found a way to inject environment variables for a subprocess on Windows. Reclassified this issue as a security issue. PR 2302 fixes this. May be there are other security vulnerabilities fixed by it. |
|||
| msg297132 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2017年06月28日 01:44 | |
Wow, it's nice to see activity on this issue that I opened 6 years ago :-) Sorry Serhiy, I don't have the bandwidth right now to review your change :-( In lack of review, I suggest you to just push it. |
|||
| msg297155 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2017年06月28日 05:30 | |
New changeset f7eae0adfcd4c50034281b2c69f461b43b68db84 by Serhiy Storchaka in branch 'master': [security] bpo-13617: Reject embedded null characters in wchar* strings. (#2302) https://github.com/python/cpython/commit/f7eae0adfcd4c50034281b2c69f461b43b68db84 |
|||
| msg297156 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2017年06月28日 06:27 | |
New changeset 0834905d9b61291b1fc5e05a1ffbc69de9c9379f by Serhiy Storchaka in branch '3.6': [3.6] bpo-13617: Reject embedded null characters in wchar* strings. (GH-2302) (#2462) https://github.com/python/cpython/commit/0834905d9b61291b1fc5e05a1ffbc69de9c9379f |
|||
| msg297158 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2017年06月28日 06:55 | |
New changeset ccdc09ed1ebea7d7c6b41548132aa08bd797bfe8 by Serhiy Storchaka in branch 'master': Fix compiler warnings on Windows introduced in bpo-13617. (#2464) https://github.com/python/cpython/commit/ccdc09ed1ebea7d7c6b41548132aa08bd797bfe8 |
|||
| msg297161 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2017年06月28日 07:31 | |
New changeset 54ba940abc2fabb94fede46dfad80f8ac15632a3 by Serhiy Storchaka in branch '3.5': [3.5] bpo-13617: Reject embedded null characters in wchar* strings. (GH-2302) (#2463) https://github.com/python/cpython/commit/54ba940abc2fabb94fede46dfad80f8ac15632a3 |
|||
| msg297162 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2017年06月28日 08:22 | |
Backporting this to 2.7 requires too much work taking to account that PyArg_Parse and other argument parsing functions don't check for null characters in 2.7. The most serious security issue is fixed in issue30730, other cases unlikely can be used for attacks. |
|||
| msg297165 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2017年06月28日 09:24 | |
Thank you very much Serhiy of taking care of this bug! |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:24 | admin | set | github: 57826 |
| 2017年06月28日 09:24:05 | vstinner | set | messages: + msg297165 |
| 2017年06月28日 08:22:41 | serhiy.storchaka | set | status: open -> closed resolution: fixed messages: + msg297162 stage: patch review -> resolved |
| 2017年06月28日 07:31:02 | serhiy.storchaka | set | messages: + msg297161 |
| 2017年06月28日 06:55:24 | serhiy.storchaka | set | messages: + msg297158 |
| 2017年06月28日 06:27:37 | serhiy.storchaka | set | messages: + msg297156 |
| 2017年06月28日 06:26:37 | serhiy.storchaka | set | pull_requests: + pull_request2519 |
| 2017年06月28日 05:46:19 | serhiy.storchaka | set | pull_requests: + pull_request2518 |
| 2017年06月28日 05:35:27 | serhiy.storchaka | set | pull_requests: + pull_request2517 |
| 2017年06月28日 05:30:09 | serhiy.storchaka | set | messages: + msg297155 |
| 2017年06月28日 01:44:08 | vstinner | set | messages: + msg297132 |
| 2017年06月21日 04:33:30 | serhiy.storchaka | set | type: behavior -> security messages: + msg296512 |
| 2017年06月20日 15:42:42 | serhiy.storchaka | set | stage: needs patch -> patch review |
| 2017年06月20日 15:42:20 | serhiy.storchaka | set | dependencies:
+ Ensure that the result of PyUnicode_AsWideCharString() doesn't contain null characters if size is not returned messages: + msg296461 |
| 2017年06月20日 15:39:29 | serhiy.storchaka | set | pull_requests: + pull_request2349 |
| 2017年06月20日 04:33:46 | serhiy.storchaka | set | assignee: serhiy.storchaka |
| 2017年06月19日 13:30:16 | vstinner | set | messages: + msg296332 |
| 2017年06月17日 17:51:03 | BreamoreBoy | set | nosy:
- BreamoreBoy |
| 2017年06月17日 15:00:23 | serhiy.storchaka | set | type: behavior versions: + Python 3.6, Python 3.7, - Python 3.4 |
| 2017年06月17日 14:59:12 | serhiy.storchaka | set | messages: + msg296241 |
| 2015年02月26日 19:21:59 | benhoyt | set | nosy:
+ benhoyt messages: + msg236699 |
| 2014年09月05日 09:51:09 | serhiy.storchaka | set | messages:
+ msg226414 versions: + Python 3.4, Python 3.5, - Python 3.2, Python 3.3 |
| 2014年06月29日 13:45:18 | BreamoreBoy | set | nosy:
+ BreamoreBoy messages: + msg221844 |
| 2012年10月24日 09:15:18 | serhiy.storchaka | set | stage: needs patch |
| 2012年10月17日 09:11:34 | serhiy.storchaka | set | nosy:
+ serhiy.storchaka messages: + msg173147 |
| 2011年12月18日 20:11:32 | vstinner | set | files:
+ embedded_nul-2.patch messages: + msg149802 |
| 2011年12月18日 18:38:02 | python-dev | set | messages: + msg149794 |
| 2011年12月18日 18:29:04 | python-dev | set | nosy:
+ python-dev messages: + msg149791 |
| 2011年12月18日 18:08:30 | arnaudc | set | files:
+ doc_unicode-2.patch messages: + msg149787 |
| 2011年12月18日 17:04:46 | arnaudc | set | files:
+ doc_unicode.patch nosy: + arnaudc messages: + msg149783 |
| 2011年12月17日 03:56:00 | vstinner | set | messages: + msg149657 |
| 2011年12月17日 03:53:41 | vstinner | create | |