Issue21313
Created on 2014-04-19 22:17 by eric.snow, last changed 2016-06-08 12:16 by martin.panter. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| parse-version.patch | martin.panter, 2016-05-13 04:49 | review | ||
| Messages (6) | |||
|---|---|---|---|
| msg216883 - (view) | Author: Eric Snow (eric.snow) * | Date: 2014-04-19 22:17 | |
Py_GetVersion() (in Python/getversion.c) builds the version string returned by sys.version: PyOS_snprintf(version, sizeof(version), "%.80s (%.80s) %.80s", PY_VERSION, Py_GetBuildInfo(), Py_GetCompiler()); In turn, Py_GetBuildInfo() (in Modules/getbuildinfo.c) returns the "build" portion of Python's version string. When available, the tag returned by "hg id -t" constitutes part of that build string. The problem is that when using mqueue the result of "hg id -t" can be pretty long. For example: issue21226-fix-PyImport_ExecCodeModuleObject.diff qbase qtip tip That's 74 characters for just part of a build string that may be well over 100 characters. However, Py_GetVersion() truncates it to 80 characters. The consequence is that this value of sys.version causes platform._sys_version() to fail since the version string does not match the expected pattern. So either Py_GetVersion() should relax (-1) or Py_GetBuildInfo() should restrict the length of the resulting build string (+1). Would it work to truncate just the hgid part so that the whole string returned by Py_GetBuildInfo() is no more than length 80? E.g. - PyOS_snprintf(buildinfo, sizeof(buildinfo), - "%s%s%s, %.20s, %.9s", hgid, sep, revision, DATE, TIME); + PyOS_snprintf(buildinfo, 80, + "%.43s%.1s%.13s, %.20s, %.9s", hgid, sep, revision, DATE, TIME); |
|||
| msg238905 - (view) | Author: Mark Lawrence (BreamoreBoy) * | Date: 2015-03-22 14:36 | |
Any comments on the proposal to restrict the length of the returned string from Py_GetBuildInfo() to 80 characters? |
|||
| msg265443 - (view) | Author: Martin Panter (martin.panter) * | Date: 2016-05-13 04:49 | |
Currently Py_GetBuildInfo() just returns a long untruncated string. Perhaps it would be safer to leave that as it is, and just make the parsing in the “platform” module more tolerant. What do you think? I never really cared about the details in Py_GetBuildInfo(), but it would be nice if the test suite would run :) |
|||
| msg265444 - (view) | Author: Martin Panter (martin.panter) * | Date: 2016-05-13 04:56 | |
>>> Py_GetBuildInfo = pythonapi.Py_GetBuildInfo >>> Py_GetBuildInfo.restype = c_char_p >>> Py_GetBuildInfo() # Not truncated 'qbase qtip subprocess-stderr_redirect_with_no_stdout_redirect-2.diff tip:0b641285389d+, May 13 2016, 02:10:26' Demo of my problem with the test suite: $ ./python -m test.regrtest Traceback (most recent call last): [. . .] File "/media/disk/home/proj/python/cpython/Lib/test/test_support.py", line 1423, in check_impl_detail return guards.get(platform.python_implementation().lower(), default) File "/media/disk/home/proj/python/cpython/Lib/platform.py", line 1451, in python_implementation return _sys_version()[0] File "/media/disk/home/proj/python/cpython/Lib/platform.py", line 1416, in _sys_version repr(sys_version)) ValueError: failed to parse CPython sys.version: '2.7.11+ (qbase qtip subprocess-stderr_redirect_with_no_stdout_redirect-2.diff tip:0b64128) \n[GCC 5.3.0]' |
|||
| msg267827 - (view) | Author: Roundup Robot (python-dev) | Date: 2016-06-08 09:50 | |
New changeset b86e259271b3 by Martin Panter in branch '2.7': Issue #21313: Tolerate truncated buildinfo in sys.version https://hg.python.org/cpython/rev/b86e259271b3 New changeset 4deec876db0d by Martin Panter in branch '3.5': Issue #21313: Tolerate truncated buildinfo in sys.version https://hg.python.org/cpython/rev/4deec876db0d New changeset aec5a3fc4890 by Martin Panter in branch 'default': Issue #21313: Merge version parsing from 3.5 https://hg.python.org/cpython/rev/aec5a3fc4890 |
|||
| msg267842 - (view) | Author: Martin Panter (martin.panter) * | Date: 2016-06-08 12:16 | |
Closing now that platform._sys_version() can tolerate the truncated version info. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2016-06-08 12:16:20 | martin.panter | set | status: open -> closed resolution: fixed messages: + msg267842 stage: patch review -> resolved |
| 2016-06-08 09:50:50 | python-dev | set | nosy:
+ python-dev messages: + msg267827 |
| 2016-05-15 11:28:07 | BreamoreBoy | set | nosy:
- BreamoreBoy |
| 2016-05-13 04:56:35 | martin.panter | set | messages: + msg265444 |
| 2016-05-13 04:49:52 | martin.panter | set | files:
+ parse-version.patch versions: + Python 3.6, - Python 3.4 nosy: + martin.panter messages: + msg265443 keywords: + patch |
| 2015-03-22 14:36:28 | BreamoreBoy | set | nosy:
+ BreamoreBoy messages: + msg238905 |
| 2014-04-19 22:17:18 | eric.snow | create | |