]> granicus.if.org Git - python/commitdiff
bpo-33706: Fix pymain_parse_cmdline_impl() (GH-7283)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 31 May 2018 13:43:21 +0000 (06:43 -0700)
committerGitHub <noreply@github.com>
Thu, 31 May 2018 13:43:21 +0000 (06:43 -0700)
Fix a crash in Python initialization when parsing the command line
options.

Fix memcpy() size parameter: previously, we read one wchar_t after
the end of _PyOS_optarg. Moreover, don't copy the trailingg NUL
character: we write it manually anyway.

Thanks Christoph Gohlke for the bug report and the fix!
(cherry picked from commit 58d1683255abb0df4fc70960da6121aeaa41e1d1)

Co-authored-by: Victor Stinner <vstinner@redhat.com>
Misc/NEWS.d/next/Core and Builtins/2018-05-31-14-50-04.bpo-33706.ztlH04.rst [new file with mode: 0644]
Modules/main.c

diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-05-31-14-50-04.bpo-33706.ztlH04.rst b/Misc/NEWS.d/next/Core and Builtins/2018-05-31-14-50-04.bpo-33706.ztlH04.rst
new file mode 100644 (file)
index 0000000..d3b8477
--- /dev/null
@@ -0,0 +1,2 @@
+Fix a crash in Python initialization when parsing the command line options.
+Thanks Christoph Gohlke for the bug report and the fix!
index 9cbb3f1ce003948358b5cb6a08ce71760baddecf..286ad418fe13a5b47d64a37d979be773342d5f99 100644 (file)
@@ -761,7 +761,7 @@ pymain_parse_cmdline_impl(_PyMain *pymain, _Py_CommandLineDetails *cmdline)
                 pymain->err = _Py_INIT_NO_MEMORY();
                 return -1;
             }
-            memcpy(command, _PyOS_optarg, len * sizeof(wchar_t));
+            memcpy(command, _PyOS_optarg, (len - 2) * sizeof(wchar_t));
             command[len - 2] = '\n';
             command[len - 1] = 0;
             pymain->command = command;