STINNER Victor <victor.stin...@haypocalc.com> added the comment:

The problem is that a warning is emited before the _warnings module is 
initialized: get_filter() uses _filters which is equal to NULL.

Attached patch initialize the _warnings module (but not the warnings module) 
before initfsencoding(). initfsencoding() is the first function loading modules 
(especially the encoding package) and so _warnings have to be initialized 
before.

The patch does also fix get_filter() to avoid the crash. This fix alone is not 
enough to fix this issue: Python cannot start because PyErr_WarnEx() returns -1 
if _warnings is not initialized yet.

I tried to display the warning (Not importing directory '/tmp/encodings': 
missing __init__.py) but it looks to be impossible: display a warning requires 
that warnings is loaded, but import warnings emits the warning. warnings 
imports indirectly encodings (linecache -> tokenize -> codecs). I consider that 
avoiding the crash is enough :-)

--

The encodings can be not empty: the crash occurs if there is an encoding 
directory is sys.path without the __init__.py file.


   $ mkdir encodings
   $ touch encodings/a
   $ touch encodings/b
   $ touch encodings/c
   $ PYTHONPATH=$PWD ./python 
   Erreur de segmentation

----------
keywords: +patch
Added file: http://bugs.python.org/file17404/warnings_bootstrap.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue8766>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to