python / cpython

The Python programming language
https://www.python.org
Other
63.2k stars 30.26k forks source link

python.exe crashes or hangs on help() modules when bad modules found #54269

Closed 589fca95-9318-4f30-bbe7-10dec0e0a7bc closed 11 years ago

589fca95-9318-4f30-bbe7-10dec0e0a7bc commented 14 years ago
BPO 10060
Nosy @terryjreedy, @vstinner, @merwok, @bitdancer, @serhiy-storchaka
Files
  • python_help_modules_help_dialog.png: Hidden prompt window.
  • unnamed
  • python_exe_help()_modules_app_modal_popup_window_behind_main_window_a.png
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields: ```python assignee = None closed_at = created_at = labels = ['library', 'type-crash'] title = 'python.exe crashes or hangs on help() modules when bad modules found' updated_at = user = 'https://bugs.python.org/devplayer' ``` bugs.python.org fields: ```python activity = actor = 'terry.reedy' assignee = 'none' closed = True closed_date = closer = 'terry.reedy' components = ['Library (Lib)'] creation = creator = 'devplayer' dependencies = [] files = ['19421', '20245', '21805'] hgrepos = [] issue_num = 10060 keywords = [] message_count = 19.0 messages = ['118298', '118301', '118362', '118380', '118397', '118822', '119345', '119955', '120007', '125149', '125150', '125151', '125168', '125242', '134571', '134594', '134608', '134609', '192061'] nosy_count = 6.0 nosy_names = ['terry.reedy', 'vstinner', 'eric.araujo', 'r.david.murray', 'devplayer', 'serhiy.storchaka'] pr_nums = [] priority = 'normal' resolution = 'wont fix' stage = 'resolved' status = 'closed' superseder = None type = 'crash' url = 'https://bugs.python.org/issue10060' versions = ['Python 2.7'] ```

    589fca95-9318-4f30-bbe7-10dec0e0a7bc commented 14 years ago

    2010-10-10 python.exe crashes or hangs on help() modules when bad modules found

    ####################################################################### SUMMARY

    The python.exe command line interpreter crashes or hangs when typing first >>>help() then >modules and a corrupt module is found.

    Python 2.7 WinXP SP3 see version details in OUTPUT sections ####################################################################### EXPLANATION

    # ----------------------- I have a workaround as a user. However it appears to be a bug from previous Python versions, 2.5 and 2.6 from what I've seen through Google and other help() module tickets.

    The workaround is simply remove the corrupt package.

    # ----------------------- I've noticed when there is a corrupt package on my PC in the Q:\Python27\Lib\site-packages folder that seems to cause a problem when issuing >>>help() then >modules in Python.

    Python command line interperter doesn't gracefully exit the assertion, it crashes or hangs.

    When entering python.exe, idle.exe or pycrust.bat (runs pycrust.py), typing help(), then typing modules, the help routine runs most of the "search-for-packages" routine fine (see OUTPUT SECTION below) and seems to find all the installed modules but when it's finished it does the following:

    In my case you will note the problem occurs on my install of the pythonwin package. On my system pythonwin will work until I exit.

    I installed a new version pythonwin just after installing Python 2.7. The pythonwin version always crashed on exit since it was installed. The old pythonwin was deinstalled before installation of the new.

    However, having a corrupt installed package shouldn't crash python.

    pythonwin version: pywin32 build214

    # ----------------------- Something of note: All my development, including Python 2.7 installation and packages and projects are on my Q: drive, which is a mapped drive pointing to a sub-folder on a networked-shared folder in WinXP.

    Actual Folder:
        D:\SUBST_DRIVES\DRIVE_Q_DEVELOPMENT
    Net-shared Folder:
       \\Mycomp\D$\Subst_drives
    Mapped Folder:
        Q: = \\Mycomp\D$\Subst_drives\DRIVE_Q_DEVELOPMENT
    
    Although not directly used by the user (me) I also have 
    subst'd drives attached to sub-folders of:
    D:\SUBST_DRIVES\DRIVE_Q_DEVELOPMENT
    such as:
    U: = D:\SUBST_DRIVES\DRIVE_Q_DEVELOPMENT\Projects\Python27\current
    
    I only mention this in case the >>>help() >modules routine, 
    while seeking modules, can traverse folder structure attached 
    to soft and hard link combos, symbolic links and junction points 
    or whether they have an effect on traversing the folder structure 
    while searching for packages.

    However, I went directly to the folder holding python.exe at D:\SUBST_DRIVES\DRIVE_Q_DEVELOPMENT\Python27\python.exe When doing help() modules .\python.exe crashed at the end of executing "modules" as well.

    # ----------------------- So far, I personally have not come across any other issues with my installation and python programs and demo code run with Python 2.7 except the previously noted exiting-of-pythonwin

    # ----------------------- Further details and output from running help() modules below for each of python.exe, pycrust and idle.

    ####################################################################### OUTPUT (3 Sections for 3 programs packaged with Python distribution) ####################################################################### ####################################################################### ####################################################################### SECTION 1 OF 3 python.exe

    ----------------------------------------------------------------------

    Q:\Projects\Python27>python.exe
    Python 2.7 (r27:82525, Jul  4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> help()

    Welcome to Python 2.7! This is the online help utility.

    If this is your first time using Python, you should definitely check out the tutorial on the Internet at http://docs.python.org/tutorial/.

    Enter the name of any module, keyword, or topic to get help on writing Python programs and using Python modules. To quit this help utility and return to the interpreter, just type "quit".

    To get a list of available modules, keywords, or topics, type "modules", "keywords", or "topics". Each module also comes with a one-line summary of what it does; to list the modules whose summaries contain a given word such as "spam", type "modules spam".

    help> modules

    Please wait a moment while I gather a list of all available modules...

    AutoComplete _threading_local itertools sspi AutoCompleteWindow _tkinter json sspicon AutoExpand _warnings keybindingDialog stat BaseHTTPServer _weakref keyword statvfs Bastion _weakrefset lib string Bindings _win32sysloader lib2to3 stringold CGIHTTPServer _winreg linecache stringprep CallTipWindow _winxptheme locale strop CallTips abc logging struct Canvas aboutDialog macosxSupport subprocess ClassBrowser adodbapi macpath sunau CodeContext afxres macurl2path sunaudio ColorDelegator aifc mailbox symbol ConfigParser antigravity mailcap symtable Cookie anydbm markupbase sys CreateBatchFiles app marshal sysconfig CreateMacScripts argparse math tabbedpages Debugger array md5 tabnanny Delegator ast media tarfile Dialog asynchat mhlib telnetlib DocXMLRPCServer asyncore mimetools tempfile EditorWindow atexit mimetypes test Enums audiodev mimify testcode FileDialog audioop mmap tests FileList base64 mmapfile text FixTk bdb mmsystem textView FormatParagraph binascii modulefinder textwrap GrepDialog binhex msilib this HTMLParser bisect msvcrt thread HyperParser bsddb multifile threading ID_NS bz2 multiprocessing time IOBinding cPickle mutex timeit IdleHistory cProfile netbios timer MOCK_WX cStringIO netrc tkColorChooser MimeWriter calendar new tkCommonDialog MultiCall cgi nntplib tkFileDialog MultiStatusBar cgitb nt tkFont ObjectBrowser chunk ntpath tkMessageBox ObjectListView clock ntsecuritycon tkSimpleDialog OutputWindow cmath nturl2path toaiff ParenMatch cmd numbers token PathBrowser code odbc tokenize Percolator codecs opcode trace PyParse codeop operator traceback PyShell collections optparse ttk PythonOgreConfig colorsys os tty Queue com os2emxpath turtle RemoteDebugger commands parser types RemoteObjectBrowser commctrl pdb unicodedata ReplaceDialog compileall perfmon unittest ReportVersion compiler pickle urllib RstripExtension configDialog pickletools urllib2 SampleFramework configHandler pipes urlparse ScriptBinding configHelpSourceEdit pkgutil user ScrolledList configSectionNameDialog platform utils ScrolledText contextlib plistlib uu SearchDialog convert_to_PANP popen2 uuid SearchDialogBase cookielib poplib warnings SearchEngine copy posixfile wave SimpleDialog copy_reg posixpath weakref SimpleHTTPServer core pprint webbrowser SimpleXMLRPCServer csv profile whichdb SocketServer ctypes pstats win2kras StackViewer curses pty win32api StringIO datetime pub win32clipboard Tix dbhash pubsub win32com Tkconstants dbi pubsub1 win32con Tkdnd dde pubsubconf win32console Tkinter decimal py_compile win32cred ToolTip difflib pyclbr win32crypt TreeWidget dircache pycrust_c win32cryptcon UndoDelegator dis pycrust_gdir win32event UserDict distutils pydoc win32evtlog UserList doctest pydoc_data win32evtlogutil UserString dprint pyexpat win32file WidgetRedirector dumbdbm pyglet win32gui WindowList dummy_thread pythoncom win32gui_struct ZoomHeight dummy_threading pythonstartup win32help _LWPCookieJar dynOptionMenuWidget pywin win32inet _MozillaCookieJar email pywin32postinstall win32inetcon \_builtin encodings pywin32testutil win32job \_future errno pywintypes win32lz _abcoll event quopri win32net _ast exceptions random win32netcon _autosetuppubsubv1 filecmp rasutil win32pdh _bisect fileinput re win32pdhquery _bsddb fnmatch regcheck win32pdhutil _codecs font regutil win32pipe _codecs_cn formatter repr win32print _codecs_hk fpformat resource win32process _codecs_iso2022 fractions rexec win32profile _codecs_jp ftplib rfc822 win32ras _codecs_kr functools rlcompleter win32rcparser _codecs_tw future_builtins robotparser win32security _collections gc rpc win32service _csv genericpath run win32serviceutil _ctypes getopt runpy win32timezone _ctypes_test getpass sched win32trace _elementtree gettext select win32traceutil _functools gl servicemanager win32transaction _hashlib glob sets win32ts _heapq graphics setup win32ui _hotshot gzip setuparg1 win32uiole _io hashlib setupkwargs win32verstamp _json heapq setupv1 win32wnet _locale hmac setupv2 window _lsprof hotshot sgmllib winerror _md5 htmlentitydefs sha winioctlcon _msi htmllib shelve winnt _multibytecodec httplib shlex winperf _multiprocessing idle shutil winsound _pyio idlelib signal winxpgui _random idlever singletonmixin winxptheme _sha ihooks site wsgiref _sha256 image smtpd wx _sha512 imageop smtplib wxPython _socket imaplib sndhdr wxversion _sqlite3 imghdr socket xdrlib _sre imp sprite xml _ssl importlib sqlite3 xmllib _strptime imputil sre xmlrpclib _struct info sre_compile xxsubtype _subprocess inspect sre_constants zipfile _symtable io sre_parse zipimport _testcapi isapi ssl zlib

    Enter any module name to get more help. Or, type "modules spam" to search for modules whose descriptions contain the word "spam".

    Q:\Projects\Python27>

    ----------------------------------------------------------------------

    WHAT YOU SEE ABOVE a copy and past: python.exe either crashes, or puts up a help> prompt window and then drops to the DOS command prompt as seen above without indicating there was a corrupt package.

    ####################################################################### ####################################################################### ####################################################################### SECTION 2 OF 3 IDLE

    ----------------------------------------------------------------------

    Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information.

    >> help()

    Welcome to Python 2.7! This is the online help utility.

    If this is your first time using Python, you should definitely check out the tutorial on the Internet at http://docs.python.org/tutorial/.

    Enter the name of any module, keyword, or topic to get help on writing Python programs and using Python modules. To quit this help utility and return to the interpreter, just type "quit".

    To get a list of available modules, keywords, or topics, type "modules", "keywords", or "topics". Each module also comes with a one-line summary of what it does; to list the modules whose summaries contain a given word such as "spam", type "modules spam".

    help> modules

    Please wait a moment while I gather a list of all available modules...

    AutoComplete _threading_local itertools sspi AutoCompleteWindow _tkinter json sspicon AutoExpand _warnings keybindingDialog stat BaseHTTPServer _weakref keyword statvfs Bastion _weakrefset lib string Bindings _win32sysloader lib2to3 stringold CGIHTTPServer _winreg linecache stringprep CallTipWindow _winxptheme locale strop CallTips abc logging struct Canvas aboutDialog macosxSupport subprocess ClassBrowser adodbapi macpath sunau CodeContext afxres macurl2path sunaudio ColorDelegator aifc mailbox symbol ConfigParser antigravity mailcap symtable Cookie anydbm markupbase sys CreateBatchFiles app marshal sysconfig CreateMacScripts argparse math tabbedpages Debugger array md5 tabnanny Delegator ast media tarfile Dialog asynchat mhlib telnetlib DocXMLRPCServer asyncore mimetools tempfile EditorWindow atexit mimetypes test Enums audiodev mimify testcode FileDialog audioop mmap tests FileList base64 mmapfile text FixTk bdb mmsystem textView FormatParagraph binascii modulefinder textwrap GrepDialog binhex msilib this HTMLParser bisect msvcrt thread HyperParser bsddb multifile threading ID_NS bz2 multiprocessing time IOBinding cPickle mutex timeit IdleHistory cProfile netbios timer MOCK_WX cStringIO netrc tkColorChooser MimeWriter calendar new tkCommonDialog MultiCall cgi nntplib tkFileDialog MultiStatusBar cgitb nt tkFont ObjectBrowser chunk ntpath tkMessageBox ObjectListView clock ntsecuritycon tkSimpleDialog OutputWindow cmath nturl2path toaiff ParenMatch cmd numbers token PathBrowser code odbc tokenize Percolator codecs opcode trace PyParse codeop operator traceback PyShell collections optparse ttk PythonOgreConfig colorsys os tty Queue com os2emxpath turtle RemoteDebugger commands parser types RemoteObjectBrowser commctrl pdb unicodedata ReplaceDialog compileall perfmon unittest ReportVersion compiler pickle urllib RstripExtension configDialog pickletools urllib2 SampleFramework configHandler pipes urlparse ScriptBinding configHelpSourceEdit pkgutil user ScrolledList configSectionNameDialog platform utils ScrolledText contextlib plistlib uu SearchDialog convert_to_PANP popen2 uuid SearchDialogBase cookielib poplib warnings SearchEngine copy posixfile wave SimpleDialog copy_reg posixpath weakref SimpleHTTPServer core pprint webbrowser SimpleXMLRPCServer csv profile whichdb SocketServer ctypes pstats win2kras StackViewer curses pty win32api StringIO datetime pub win32clipboard Tix dbhash pubsub win32com Tkconstants dbi pubsub1 win32con Tkdnd dde pubsubconf win32console Tkinter decimal py_compile win32cred ToolTip difflib pyclbr win32crypt TreeWidget dircache pycrust_c win32cryptcon UndoDelegator dis pycrust_gdir win32event UserDict distutils pydoc win32evtlog UserList doctest pydoc_data win32evtlogutil UserString dprint pyexpat win32file WidgetRedirector dumbdbm pyglet win32gui WindowList dummy_thread pythoncom win32gui_struct ZoomHeight dummy_threading pythonstartup win32help _LWPCookieJar dynOptionMenuWidget pywin win32inet _MozillaCookieJar email pywin32postinstall win32inetcon \_builtin encodings pywin32testutil win32job \_future errno pywintypes win32lz _abcoll event quopri win32net _ast exceptions random win32netcon _autosetuppubsubv1 filecmp rasutil win32pdh _bisect fileinput re win32pdhquery _bsddb fnmatch regcheck win32pdhutil _codecs font regutil win32pipe _codecs_cn formatter repr win32print _codecs_hk fpformat resource win32process _codecs_iso2022 fractions rexec win32profile _codecs_jp ftplib rfc822 win32ras _codecs_kr functools rlcompleter win32rcparser _codecs_tw future_builtins robotparser win32security _collections gc rpc win32service _csv genericpath run win32serviceutil _ctypes getopt runpy win32timezone _ctypes_test getpass sched win32trace _elementtree gettext select win32traceutil _functools gl servicemanager win32transaction _hashlib glob sets win32ts _heapq graphics setup win32ui _hotshot gzip setuparg1 win32uiole _io hashlib setupkwargs win32verstamp _json heapq setupv1 win32wnet _locale hmac setupv2 window _lsprof hotshot sgmllib winerror _md5 htmlentitydefs sha winioctlcon _msi htmllib shelve winnt _multibytecodec httplib shlex winperf _multiprocessing idle shutil winsound _pyio idlelib signal winxpgui _random idlever singletonmixin winxptheme _sha ihooks site wsgiref _sha256 image smtpd wx _sha512 imageop smtplib wxPython _socket imaplib sndhdr wxversion _sqlite3 imghdr socket xdrlib _sre imp sprite xml _ssl importlib sqlite3 xmllib _strptime imputil sre xmlrpclib _struct info sre_compile xxsubtype _subprocess inspect sre_constants zipfile _symtable io sre_parse zipimport _testcapi isapi ssl zlib

    Enter any module name to get more help. Or, type "modules spam" to search for modules whose descriptions contain the word "spam".

    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        help()
      File "Q:\Python27\lib\site.py", line 453, in __call__
        return pydoc.help(*args, **kwds)
      File "Q:\Python27\lib\pydoc.py", line 1723, in __call__
        self.interact()
      File "Q:\Python27\lib\pydoc.py", line 1735, in interact
        request = self.getline('help> ')
      File "Q:\Python27\lib\pydoc.py", line 1746, in getline
        return raw_input(prompt)
      File "Q:\Python27\Lib\site-packages\pythonwin\pywin\framework\app.py", line 367, in Win32RawInput
        ret=dialog.GetSimpleInput(prompt)
      File "Q:\Python27\Lib\site-packages\pythonwin\pywin\mfc\dialog.py", line 223, in GetSimpleInput
        if title is None: title=win32ui.GetMainFrame().GetWindowText()
    error: The frame does not exist
    >>> 

    ----------------------------------------------------------------------

    IDLE doesn't crash

    ####################################################################### ####################################################################### ####################################################################### SECTION 3 OF 3 PyCrust

    ----------------------------------------------------------------------

    PyCrust 0.9.8 - The Flakiest Python Shell Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. Startup script executed: C:\Documents and Settings\User\Application Data\pycrust\startup help()

    Welcome to Python 2.7! This is the online help utility.

    If this is your first time using Python, you should definitely check out the tutorial on the Internet at http://docs.python.org/tutorial/.

    Enter the name of any module, keyword, or topic to get help on writing Python programs and using Python modules. To quit this help utility and return to the interpreter, just type "quit".

    To get a list of available modules, keywords, or topics, type "modules", "keywords", or "topics". Each module also comes with a one-line summary of what it does; to list the modules whose summaries contain a given word such as "spam", type "modules spam".

    help> modules

    Please wait a moment while I gather a list of all available modules...

    AutoComplete _threading_local itertools sspi AutoCompleteWindow _tkinter json sspicon AutoExpand _warnings keybindingDialog stat BaseHTTPServer _weakref keyword statvfs Bastion _weakrefset lib string Bindings _win32sysloader lib2to3 stringold CGIHTTPServer _winreg linecache stringprep CallTipWindow _winxptheme locale strop CallTips abc logging struct Canvas aboutDialog macosxSupport subprocess ClassBrowser adodbapi macpath sunau CodeContext afxres macurl2path sunaudio ColorDelegator aifc mailbox symbol ConfigParser antigravity mailcap symtable Cookie anydbm markupbase sys CreateBatchFiles app marshal sysconfig CreateMacScripts argparse math tabbedpages Debugger array md5 tabnanny Delegator ast media tarfile Dialog asynchat mhlib telnetlib DocXMLRPCServer asyncore mimetools tempfile EditorWindow atexit mimetypes test Enums audiodev mimify testcode FileDialog audioop mmap tests FileList base64 mmapfile text FixTk bdb mmsystem textView FormatParagraph binascii modulefinder textwrap GrepDialog binhex msilib this HTMLParser bisect msvcrt thread HyperParser bsddb multifile threading ID_NS bz2 multiprocessing time IOBinding cPickle mutex timeit IdleHistory cProfile netbios timer MOCK_WX cStringIO netrc tkColorChooser MimeWriter calendar new tkCommonDialog MultiCall cgi nntplib tkFileDialog MultiStatusBar cgitb nt tkFont ObjectBrowser chunk ntpath tkMessageBox ObjectListView clock ntsecuritycon tkSimpleDialog OutputWindow cmath nturl2path toaiff ParenMatch cmd numbers token PathBrowser code odbc tokenize Percolator codecs opcode trace PyParse codeop operator traceback PyShell collections optparse ttk PythonOgreConfig colorsys os tty Queue com os2emxpath turtle RemoteDebugger commands parser types RemoteObjectBrowser commctrl pdb unicodedata ReplaceDialog compileall perfmon unittest ReportVersion compiler pickle urllib RstripExtension configDialog pickletools urllib2 SampleFramework configHandler pipes urlparse ScriptBinding configHelpSourceEdit pkgutil user ScrolledList configSectionNameDialog platform utils ScrolledText contextlib plistlib uu SearchDialog convert_to_PANP popen2 uuid SearchDialogBase cookielib poplib warnings SearchEngine copy posixfile wave SimpleDialog copy_reg posixpath weakref SimpleHTTPServer core pprint webbrowser SimpleXMLRPCServer csv profile whichdb SocketServer ctypes pstats win2kras StackViewer curses pty win32api StringIO datetime pub win32clipboard Tix dbhash pubsub win32com Tkconstants dbi pubsub1 win32con Tkdnd dde pubsubconf win32console Tkinter decimal py_compile win32cred ToolTip difflib pyclbr win32crypt TreeWidget dircache pycrust_c win32cryptcon UndoDelegator dis pycrust_gdir win32event UserDict distutils pydoc win32evtlog UserList doctest pydoc_data win32evtlogutil UserString dprint pyexpat win32file WidgetRedirector dumbdbm pyglet win32gui WindowList dummy_thread pythoncom win32gui_struct ZoomHeight dummy_threading pythonstartup win32help _LWPCookieJar dynOptionMenuWidget pywin win32inet _MozillaCookieJar email pywin32postinstall win32inetcon \_builtin encodings pywin32testutil win32job \_future errno pywintypes win32lz _abcoll event quopri win32net _ast exceptions random win32netcon _autosetuppubsubv1 filecmp rasutil win32pdh _bisect fileinput re win32pdhquery _bsddb fnmatch regcheck win32pdhutil _codecs font regutil win32pipe _codecs_cn formatter repr win32print _codecs_hk fpformat resource win32process _codecs_iso2022 fractions rexec win32profile _codecs_jp ftplib rfc822 win32ras _codecs_kr functools rlcompleter win32rcparser _codecs_tw future_builtins robotparser win32security _collections gc rpc win32service _csv genericpath run win32serviceutil _ctypes getopt runpy win32timezone _ctypes_test getpass sched win32trace _elementtree gettext select win32traceutil _functools gl servicemanager win32transaction _hashlib glob sets win32ts _heapq graphics setup win32ui _hotshot gzip setuparg1 win32uiole _io hashlib setupkwargs win32verstamp _json heapq setupv1 win32wnet _locale hmac setupv2 window _lsprof hotshot sgmllib winerror _md5 htmlentitydefs sha winioctlcon _msi htmllib shelve winnt _multibytecodec httplib shlex winperf _multiprocessing idle shutil winsound _pyio idlelib signal winxpgui _random idlever singletonmixin winxptheme _sha ihooks site wsgiref _sha256 image smtpd wx _sha512 imageop smtplib wxPython _socket imaplib sndhdr wxversion _sqlite3 imghdr socket xdrlib _sre imp sprite xml _ssl importlib sqlite3 xmllib _strptime imputil sre xmlrpclib _struct info sre_compile xxsubtype _subprocess inspect sre_constants zipfile _symtable io sre_parse zipimport _testcapi isapi ssl zlib

    Enter any module name to get more help. Or, type "modules spam" to search for modules whose descriptions contain the word "spam".

    Traceback (most recent call last):
      File "<input>", line 1, in <module>
      File "Q:\Python27\lib\site.py", line 453, in __call__
        return pydoc.help(*args, **kwds)
      File "Q:\Python27\lib\pydoc.py", line 1723, in __call__
        self.interact()
      File "Q:\Python27\lib\pydoc.py", line 1735, in interact
        request = self.getline('help> ')
      File "Q:\Python27\lib\pydoc.py", line 1746, in getline
        return raw_input(prompt)
      File "Q:\Python27\Lib\site-packages\pythonwin\pywin\framework\app.py", line 367, in Win32RawInput
        ret=dialog.GetSimpleInput(prompt)
      File "Q:\Python27\Lib\site-packages\pythonwin\pywin\mfc\dialog.py", line 223, in GetSimpleInput
        if title is None: title=win32ui.GetMainFrame().GetWindowText()
    error: The frame does not exist

    ----------------------------------------------------------------------

    Then after doing anything in PyCrust it crashes

    ####################################################################### ####################################################################### #######################################################################

    bitdancer commented 14 years ago

    There isn't much that Python can do if there is a sufficiently broken C-based module in sys.path. All you report about the problematic module is that it is 'bad' or 'corrupt'. Can you give more information about what makes it bad?

    589fca95-9318-4f30-bbe7-10dec0e0a7bc commented 14 years ago

    I believe that a 3rd party package is corrupt. Whether it is or not I don't know. However whether or not a package is corrupt or not is not what I am reporting as a bug.

    I am reporting that python.exe crashes when I do help() modules.

    In GUI wrappers around python.exe, such as idle and pycrust, I get more information to the problem then when just in python.exe command line interpreter. As per the first post the errors I get in pycrust and idle are: ... File "Q:\Python27\Lib\site-packages\pythonwin\pywin\framework\app.py", line 367, in Win32RawInput ret=dialog.GetSimpleInput(prompt) File "Q:\Python27\Lib\site-packages\pythonwin\pywin\mfc\dialog.py", line 223, in GetSimpleInput if title is None: title=win32ui.GetMainFrame().GetWindowText() error: The frame does not exist

    To be honest the meaning of these errors is beyond my expertise, or lack of thereof. I attempted to give as much info on what I experienced with running python.exe help() modules as I saw.

    If there is a direction you can point me to that I can gather more information then what I've already given, I'll give that a go as well.

    Other pointers to reported problems of a similar nature: http://mail.python.org/pipermail/pythonmac-sig/2008-November/020712.html https://bugs.launchpad.net/ubuntu/+source/python2.5/+bug/137210

    Again this is not a report of a corrupt package.

    It is a report of python.exe crashing using commands considered part of Python.exe; that being help() then modules.

    An external library may be the cause or may not. But if it is an external library that is corrupt I would hope python.exe would not fail because of it, but instead just either ignore the package or report an error. Another reason why I think python.exe shouldn't crash because of external library integrity is what if there is a file or some such thing in one's Python path that looks like and smells like a Python module/package but isn't? Should python.exe fail because of such a file?

    I do not know the structure of a Python package or whether pythonwin on my PC is corrupt. However I imaging that if a fake package can be made so that IT is corrupt (perhaps make a missing file) that testing would be relatively easy.

    Sorry I don't have more information for you. But hearing from others who have tried their python.exe help() modules works or fails would be a start.

    bitdancer commented 14 years ago

    What I am saying is that if an extension module (one that provides non-python code in a load module) is corrupt, then it can totally screw up Python's internal bookkeeping, and there is nothing Python can do to protect itself against that.

    If the "corrupt" module in question is pure Python, then you are correct, 'help' should not fail. If, however, the corrupt module is not pure Python, then there may be nothing that can be done by Python to prevent the failure.

    Can you reproduce the problem using a pure Python 'corrupt' module?

    589fca95-9318-4f30-bbe7-10dec0e0a7bc commented 14 years ago

    On Mon, Oct 11, 2010 at 1:43 PM, R. David Murray \report@bugs.python.org\wrote: R. David Murray \rdmurray@bitdance.com\ added the comment: Can you reproduce the problem using a pure Python 'corrupt' module? ----------

    When in python.exe, and you type help() then modules, aren't you really asking for packages? I don't know how to make a package let alone a corrupt one.

    If help() modules is in fact looking for just a Python module file with extension _.py in lib\site-packages I don't know what Python help() modules looks for in that source code _.py file to be considered a module worth reporting back to the user. Certain module attributes?

    I do not know enough atm about how PythonWin is packaged. I'll look into it but I'm a newbie here and hopes for well informed facts on PythonWin may be ... well leave it at that.

    Perhaps an idea here too: If python.exe help() modules crashes when it passes control to a module or package that is not pure Python (source code or byte code) but some kind of C SWIG thing, then perhaps to make python.exe more robust it should simulate what idle does, as idle does not crash and it reports error when finished with calling python.exe help() modules.

    In other words, perhaps the Python interpreter can call an external routine (another program) that behaves like help() modules, perhaps using something like os.system() or subprocess.Popen(). Call it help.py or help.exe or something. If help.exe returns, all is good. If help crashes just like Python did at least Python can handle the crashing of help.exe gracefully. This idea is purely with the interest to make python.exe more robust.

    terryjreedy commented 14 years ago

    The unnamed quasi-html file loaded with msg118397 was a unless, essentially unreadable duplicate of that message, hence removed.

    merwok commented 14 years ago

    There are half a dozen duplicate bugs of this one, with various suggestions on each. They should be summed up and linked. I should be able to do it this week-end if no-one does it first.

    589fca95-9318-4f30-bbe7-10dec0e0a7bc commented 14 years ago

    Another thing I've noticed that makes the issue more complicated (or perhaps less complicated depending on your view).

    When running the python.exe at the DOS prompt (in a window on WinXP), then issuing the help() then modules commands, python.exe seems to hang at times, when it doesn't crash. However this apparent hang sometimes seems to be related to the attached "help" child window/dialog popup instantating with "focus" behind the DOS window. This popup with the focus (and behind it's parent window and being modal) prevents the mouse from moving the DOS window (holding the running python.exe) from being moved. The -sometimes- solution to this "apparent" hang is ALT-TAB back to the DOS window which will put the help-modal-dialog on top of said DOS window (which is running Python).

    terryjreedy commented 13 years ago

    Éric, go ahead and consolidate to one issue if you can get to it. Do the other issues shows problems with 3.1 or 3.2 also? I wonder because I have never seen the box in the posted .png and wonder if that is a new 'feature' with 2.7 and possibly 3.2 that was not in 3.1 and possibly the cause. Has anyone posted a 'corrupt module' that reliably reproduces the problem? It is hard to investigate when 'help> modules' works just fine, as it does on my 3.1.2 install.

    'Dev': your original post is way too long. The welcome message and module lists could have been snipped to one line plus ellipsis. Example:

    >> help()

    Welcome .... [snip]

    help> modules

    Please wait.... [snip]

    and continue with traceback.

    589fca95-9318-4f30-bbe7-10dec0e0a7bc commented 13 years ago
    import win32ui
    from win32ui import GetMainFrame
    
    dir(win32ui.GetMainFrame)
    ['__call__', '__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
    
    dir(GetMainFrame)
    ['__call__', '__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

    Is this normal? I'd expect at least GetWindowText() in the dir().

    589fca95-9318-4f30-bbe7-10dec0e0a7bc commented 13 years ago
    from GetMainFrame import GetWindowText
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    ImportError: No module named GetMainFrame

    Also, I installed from the MS-Windows installer file: pywin32-214.win32-py2.7.exe

    not from "pywin32-214.zip" which I think is the source distrobution.

    I've tried reinstallation but I get the same results.

    589fca95-9318-4f30-bbe7-10dec0e0a7bc commented 13 years ago

    Oh I am running on an Intel Pentium 4 3.2GHz/3.2Ghz. Windows XP Pro SP3 32 bit So I presume I should not have used the AMD 64 versions of course.

    http://sourceforge.net/projects/pywin32/files/pywin32/Build%20214/

    bitdancer commented 13 years ago

    Dev: I have no idea how what you just posted relates to the subject of this issue. Could you clarify please?

    589fca95-9318-4f30-bbe7-10dec0e0a7bc commented 13 years ago

    It was suggested that a corrupt package would be where I'm experiencing the lockup or crash of python.exe when issuing help() and then "modules". And that if I or someone could verify that a corrupt package has this effect by creating a corrupt package. I have not figured out how to make a package let a lone a corrupt one. I think the following traceback points to my pywin32 being corrupt. Although I've downloaded that package from sourceforge more then twice and reinstalled that package.

    I included the information in the previous posts in case it helps in the following mannger; I expect others here in this forum are likely to have pywin32 version 214 installed. They could compare what I get from the traceback (returned when using help() modules) the "dir(win32ui.GetMainFrame)" with what they have. So that if they get something different with their dir(win32ui.GetmainFrame) then we at least are more sure of where this issue is occuring.

    Why does python.exe help() fail when an object, in this case win32ui, in the traceback does not have a certain attribute, GetMainframe?

    The dir() outputs in my previous posts show an object pywin32 package doesn't have all the expected member attributes. It calls win32ui.GetMainFrame.GetWindowText() method which doesn't exist.

    Why would help() fail on that? I'm no expert but I figured the information could help point someone in the right direction.

    BTW I've created a ticket in the pywin32 at sourceforge.net. - Because I only suspect it's a corrupt package, I'm not sure and thought others there would be able to tell me if it's the distro file or my installation.

    Traceback reprinted:

    Traceback (most recent call last):
      File "<input>", line 1, in <module>
      File "Q:\Python27\lib\site.py", line 453, in __call__
        return pydoc.help(*args, **kwds)
      File "Q:\Python27\lib\pydoc.py", line 1723, in __call__
        self.interact()
      File "Q:\Python27\lib\pydoc.py", line 1735, in interact
        request = self.getline('help> ')
      File "Q:\Python27\lib\pydoc.py", line 1746, in getline
        return raw_input(prompt)
      File "Q:\Python27\Lib\site-packages\pythonwin\pywin\framework\app.py",
    line 367, in Win32RawInput
        ret=dialog.GetSimpleInput(prompt)
      File "Q:\Python27\Lib\site-packages\pythonwin\pywin\mfc\dialog.py", line
    223, in GetSimpleInput
        if title is None: title=win32ui.GetMainFrame().GetWindowText()
    error: The frame does not exist
    589fca95-9318-4f30-bbe7-10dec0e0a7bc commented 13 years ago

    mhammond added a recent note at:

    python.exe help() modules crashes - ID: 3150027 https://sourceforge.net/tracker/?func=detail&aid=3150027&group_id=78018&atid=551954

    Scroll down below the detail and click the "Comments" link. View the note from mhammond's on 4/24/2011.

    Although this note will likely solve my particular problem, I suspect it does not directly solve "any corrput package" that would cause "python.exe" "help()" "modules" to crash or "appear to crash" (i.e. the modal popup appearing behind it's parent window).

    589fca95-9318-4f30-bbe7-10dec0e0a7bc commented 13 years ago

    What about this application modal popup window appearing behind the DOS window? (See attached) That popup window may only need to have a system style flag to push it to the top of the window z-order stack.

    What causes that popup to appear? Is it Python source code or compiled C code built into python.exe?

    There is a MS-Windows win32 function called SetForegroundWindow() that may be the issue if it's not Python source code. Maybe this URL might shed some light on the popup issue?

    http://stackoverflow.com/questions/3772233/win32-setforegroundwindow-unreliable

    I am grasping for straws here.

    Perhaps the python.exe app crashes in the cmd.exe window because of attempts to do something with the cmd.exe window while the app modal popup windows is behind it?

    As per my previous post is seems mhammond has a solution for his pythonwin package causing python.exe-help()-modules to crash. (If that's the case) it still doesn't address "other" packages having the same ability to crash python.exe, IDLE and other interactive interpreters thru help()-modules.

    589fca95-9318-4f30-bbe7-10dec0e0a7bc commented 13 years ago

    Just delete the previous message... please.

    terryjreedy commented 13 years ago

    (Note: the word is 'separate', 2 e's and 2 a's, not 'seperate') (Note: We already know that using unbound unquoted names does not work. Please do not waste our time telling us the obvious.) (Note: I am removing IDLE because this does not seem to be an IDLE issue but a help() issue. I marked 'Library' because 'help' is installed by the site module.)

    Help is not built in to python.exe. It is added to builtins when the site module is imported. That import can be suppressed with the '-S' startup option. It is strictly intended for interactive use.

    I do not see this as much of a security issue. Crashing apps and especially servers should not be an issue because neither should be using help. Anyway, I should think that a hacker that can install a broken C extension could do much worse things.

    Help has three modes. 1) the direct response mode of help(ob) 2) the direct response mode of help(somestring), where help looks to see if it recognizes somestring before returning help for str. help('modules') works fine. 3) the mini-interpreter mode of help(). People can run the mini-interpreter in a separate interactive instance of the interpreter if they wish. I do not think this needs to be done automatically.

    I am inclined to close this issue as I do not see any action needed by Cpython developers. Contrary to your assertion, running corrupt C-coded extensions *does* crash the process, and I do not think there is much we can do about it, as C lacks try:...except:. Certainly, there is no promise to guard against such. In my view, removing a corrupt package is an answer, not a workaround!

    terryjreedy commented 11 years ago

    This issue still seems to be about bad extension modules crashing CPython and we cannot fix that.