Buffer Overflow with Python 2.5 on Vista in import site

Fuzzyman fuzzyman at gmail.com
Sat Mar 29 16:34:27 EDT 2008


A very odd error with Python 2.5 (both 2.5.1 and 2.5.2 from the
official msi installers and running on Vista under Parallels on the
Mac).

'import site' fails due to a string in sys.path that contains a huge
number of null bytes.

The error is actually in ntpath - I adjusted it to print the paths it
is working with and a string on encountering the bad path.

Because 'import site' is executed twice with the following code I
snipped the first dump and only print the one with the traceback:

C:\Users\Administrator>python -c "import site"

[snip]

'import site' failed; use -v for traceback
set(['c:\\python25\\lib\\plat-win', 'c:\\windows\\system32\
\python25.zip', 'c:\\
python25', 'c:\\python25\\lib\\lib-tk', 'c:\\users\\administrator', 'c:
\\python2
5\\dlls', 'c:\\python25\\lib', 'c:\\python25\\lib\\site-packages'])

********************  BAD PATH  ********************
"C:\\Python25\\lib\\site-packages\\\x00\x05\x16\x07\x00\x02\x00\x00Mac
OS X
   \x00\x02\x00\x00\x00\t\x00\x00\x002\x00\x00\x0e
\xb0\x00\x00\x00\x02\x00\x00\x
0e\xe2\x00\x00\x01\x1e
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00AT
TR\x00\x00\x00!\x00\x00\x0e\xe2\x00\x00\x00\x98\x00\x00\x00
\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x98\x00\x00\x00
\x00\x0
0\x15com.macromates.caret\x00x\x9c\xab\xe6R\x00\x82\xe4\xfc\x9c
\xd2\xdc<\x05[\x0
5\x03k0?'3/\x15\xc2\xab\x05\x00\x8b\x99\x08\x1d
\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\

[snip a load of null bytes]

x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x1eThis resource
fork intent
ionally left blank
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0

[snip a load more null bytes]

0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0
0\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x1e
\x00\x00\x00\x00\x0
0\x00\x00\x00\x00\x1c\x00\x1e\xff\xff"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Python25\lib\site.py", line 417, in <module>
    main()
  File "C:\Python25\lib\site.py", line 402, in main
    paths_in_sys = addsitepackages(paths_in_sys)
  File "C:\Python25\lib\site.py", line 206, in addsitepackages
    addsitedir(sitedir, known_paths)
  File "C:\Python25\lib\site.py", line 169, in addsitedir
    addpackage(sitedir, name, known_paths)
  File "C:\Python25\lib\site.py", line 141, in addpackage
    dir, dircase = makepath(sitedir, line)
  File "C:\Python25\lib\site.py", line 67, in makepath
    dir = os.path.abspath(os.path.join(*paths))
  File "C:\Python25\lib\ntpath.py", line 500, in abspath
    path = _getfullpathname(path)
TypeError: _getfullpathname() argument 1 must be (buffer overflow),
not str


Odd. Anyone got any clues?

Michael Foord
http://www.ironpythoninaction.com



More information about the Python-list mailing list