diff Python/sysmodule.c @ 84785:dca92e8a011a 3.3

Issue #15905: Fix theoretical buffer overflow in handling of sys.argv[0], prefix and exec_prefix if the operation system does not obey MAXPATHLEN.
author Christian Heimes <christian@cheimes.de>
date Mon, 22 Jul 2013 12:53:32 +0200
parents ee01fd98b5b0
children 694e50a79638 01597384531f
line wrap: on
line diff
--- a/Python/sysmodule.c	Mon Jul 22 10:37:41 2013 +0200
+++ b/Python/sysmodule.c	Mon Jul 22 12:53:32 2013 +0200
@@ -1856,10 +1856,11 @@
             if (q == NULL)
                 argv0 = link; /* argv0 without path */
             else {
-                /* Must make a copy */
-                wcscpy(argv0copy, argv0);
+                /* Must make a copy, argv0copy has room for 2 * MAXPATHLEN */
+                wcsncpy(argv0copy, argv0, MAXPATHLEN);
                 q = wcsrchr(argv0copy, SEP);
-                wcscpy(q+1, link);
+                wcsncpy(q+1, link, MAXPATHLEN);
+                q[MAXPATHLEN + 1] = L'\0';
                 argv0 = argv0copy;
             }
         }