comparison Python/sysmodule.c @ 84786:01597384531f

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:54:21 +0200
parents 1da78c7d382b dca92e8a011a
children fc718c177ee6
comparison
equal deleted inserted replaced
84784:878dc9dfc565 84786:01597384531f
1852 /* Must join(dirname(argv0), link) */ 1852 /* Must join(dirname(argv0), link) */
1853 wchar_t *q = wcsrchr(argv0, SEP); 1853 wchar_t *q = wcsrchr(argv0, SEP);
1854 if (q == NULL) 1854 if (q == NULL)
1855 argv0 = link; /* argv0 without path */ 1855 argv0 = link; /* argv0 without path */
1856 else { 1856 else {
1857 /* Must make a copy */ 1857 /* Must make a copy, argv0copy has room for 2 * MAXPATHLEN */
1858 wcscpy(argv0copy, argv0); 1858 wcsncpy(argv0copy, argv0, MAXPATHLEN);
1859 q = wcsrchr(argv0copy, SEP); 1859 q = wcsrchr(argv0copy, SEP);
1860 wcscpy(q+1, link); 1860 wcsncpy(q+1, link, MAXPATHLEN);
1861 q[MAXPATHLEN + 1] = L'\0';
1861 argv0 = argv0copy; 1862 argv0 = argv0copy;
1862 } 1863 }
1863 } 1864 }
1864 } 1865 }
1865 #endif /* HAVE_READLINK */ 1866 #endif /* HAVE_READLINK */