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 2010年04月11日 18:45 by baikie, last changed 2022年04月11日 14:56 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| af_unix-pep383.diff | baikie, 2010年04月11日 18:45 | Handle AF_UNIX addresses according to PEP 383 | ||
| af_unix-pep383-no-8372-fix.diff | baikie, 2010年04月11日 18:47 | Version which applies onto existing code, without fixing issue #8372 | ||
| test-existing.diff | baikie, 2010年04月11日 18:48 | Tests for existing behaviour that patch preserves | ||
| test-new.diff | baikie, 2010年04月11日 18:49 | Tests for new behaviour (surrogateescape handling) | ||
| af_unix-pep383-doc.diff | baikie, 2010年04月11日 18:50 | Doc updates | ||
| af_unix-pep383-docs-tests-3.2.diff | baikie, 2010年09月11日 18:08 | Documentation and tests for new version of patch | ||
| af_unix-pep383-3.2-with-linux-unterminated.diff | baikie, 2010年09月11日 18:10 | Patch for 3.2 (if linux-pass-unterminated patch from issue #8372 is applied) | ||
| af_unix-pep383-3.2-without-linux-unterminated.diff | baikie, 2010年09月11日 18:10 | Patch for 3.2 (if linux-pass-unterminated patch is not applied) | ||
| af_unix-pep383-docs-tests-3.2-2.diff | baikie, 2010年09月11日 19:13 | Removed use of sys.setfilesystemencoding() | ||
| Messages (6) | |||
|---|---|---|---|
| msg102865 - (view) | Author: David Watson (baikie) | Date: 2010年04月11日 18:45 | |
In 3.x, the socket module assumes that AF_UNIX addresses use UTF-8 encoding - this means, for example, that accept() will raise UnicodeDecodeError if the peer socket path is not valid UTF-8, which could crash an unwary server. Python 3.1.2 (r312:79147, Mar 23 2010, 19:02:21) [GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from socket import * >>> s = socket(AF_UNIX, SOCK_STREAM) >>> s.bind(b"\xff") >>> s.getsockname() Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: unexpected code byte I'm attaching a patch to handle socket paths according to PEP 383. Normally this would use PyUnicode_FSConverter, but there are a couple of ways in which the address handling currently differs from normal filename handling. One is that embedded null bytes are passed through to the system instead of being rejected, which is needed for the Linux abstract namespace. These abstract addresses are returned as bytes objects, but they can currently be specified as strings with embedded null characters as well. The patch preserves this behaviour. The current code also accepts read-only buffer objects (it uses the "s#" format), so in order to accept these as well as bytearray filenames (which the posix module accepts), the patch simply accepts any single-segment buffer, read-only or not. This patch applies on top of the patches I submitted for issue #8372 (rather than knowingly running past the end of sun_path). |
|||
| msg102866 - (view) | Author: David Watson (baikie) | Date: 2010年04月11日 18:47 | |
This patch does the same thing without fixing issue #8372 (not that I'd recommend that, but it may be easier to review). |
|||
| msg116111 - (view) | Author: David Watson (baikie) | Date: 2010年09月11日 18:08 | |
Updated the patches for Python 3.2 - these are now simpler as they do not support bytearray arguments, as these are no longer used for filenames (the existing code does not support bytearrays either). I've put the docs and tests in one patch, and made separate patches for the code, one for if the linux-pass-unterminated patch from issue #8372 is applied, and one for if it isn't. One point I neglected to comment on before is the ability to specify an address in the Linux abstract namespace as a filesystem-encoded string prefixed with a null character. This may seem strange, but as well as simplifying the code, it does support an actual use case, as on Linux systems the abstract namespace is sometimes used to hold names based on real filesystem paths such as "\x00/var/run/hald/dbus-XAbemUfDyQ", or imaginary ones, such as "\x00/com/ubuntu/upstart". In fact, running "netstat" on my own system did not reveal any non-textual abstract names in use (although they are of course allowed). |
|||
| msg116116 - (view) | Author: David Watson (baikie) | Date: 2010年09月11日 19:13 | |
One of the tests got broken by the removal of sys.setfilesystemencoding(). Replaced it. |
|||
| msg149621 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2011年12月16日 13:47 | |
New changeset 1f23bb74f4bc by Antoine Pitrou in branch 'default': Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem http://hg.python.org/cpython/rev/1f23bb74f4bc |
|||
| msg149622 - (view) | Author: Antoine Pitrou (pitrou) * (Python committer) | Date: 2011年12月16日 13:47 | |
Patch committed in 3.3 (default branch), thank you! |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:56:59 | admin | set | github: 52620 |
| 2011年12月16日 13:47:41 | pitrou | set | status: open -> closed versions: + Python 3.3, - Python 3.1, Python 3.2 nosy: + pitrou messages: + msg149622 resolution: fixed stage: patch review -> resolved |
| 2011年12月16日 13:47:07 | python-dev | set | nosy:
+ python-dev messages: + msg149621 |
| 2010年09月11日 19:13:00 | baikie | set | files:
+ af_unix-pep383-docs-tests-3.2-2.diff messages: + msg116116 |
| 2010年09月11日 18:10:35 | baikie | set | files: + af_unix-pep383-3.2-without-linux-unterminated.diff |
| 2010年09月11日 18:10:04 | baikie | set | files: + af_unix-pep383-3.2-with-linux-unterminated.diff |
| 2010年09月11日 18:08:43 | baikie | set | files:
+ af_unix-pep383-docs-tests-3.2.diff messages: + msg116111 |
| 2010年04月11日 19:04:55 | pitrou | set | priority: normal nosy: + loewis, vstinner stage: patch review versions: - Python 3.3 |
| 2010年04月11日 18:50:11 | baikie | set | files: + af_unix-pep383-doc.diff |
| 2010年04月11日 18:49:38 | baikie | set | files: + test-new.diff |
| 2010年04月11日 18:48:57 | baikie | set | files: + test-existing.diff |
| 2010年04月11日 18:47:33 | baikie | set | files:
+ af_unix-pep383-no-8372-fix.diff messages: + msg102866 |
| 2010年04月11日 18:45:26 | baikie | create | |