This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: tempfile crashes
Type: Stage:
Components: Windows Versions: Python 2.3
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: theller Nosy List: nnorwitz, theller, tim.peters
Priority: normal Keywords:

Created on 2002-10-15 09:54 by theller, last changed 2022-04-10 16:05 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
posixmodule.c.diff theller, 2002-11-05 20:40 Patch for posixmodule.c
Messages (15)
msg12781 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2002-10-15 09:54
tempfile.NamedTemporaryFile(".zip") crashes with an 
access violation. Win2k, SP2.
msg12782 - (view) Author: Neal Norwitz (nnorwitz) * (Python committer) Date: 2002-10-17 21:30
Logged In: YES 
user_id=33168

Note:  You probably want:
  tempfile.NamedTemporaryFile(suffix=".zip")

I tried this under Linux and get: OSError: [Errno 22]
Invalid argument

So this appears to be windows specific.  Exactly which line
is causing the crash? os.fdopen?
msg12783 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2002-10-18 08:20
Logged In: YES 
user_id=11105

It crashes in fdopen - looks like a bug in MS runtime library:

(in file vc98\crt\src\fdopen.c)
fdopen calls _tfopen(), creates a FILE *stream, and if the first 
character in mode is not r, w, or a, sets 'stream' to NULL to 
signal an error. Then it calls _unlock_str(stream), which 
crashes.
msg12784 - (view) Author: Neal Norwitz (nnorwitz) * (Python committer) Date: 2002-11-02 20:53
Logged In: YES 
user_id=33168

We don't check anywhere else for valid mode chars.  We would
have to fix Modules/posixmodule.c and Modules/socketmodule
if we wanted to check.  Thomas, do you think a checks should
be added or close this as a 3rd party problem?
msg12785 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2002-11-04 20:36
Logged In: YES 
user_id=11105

IMO we should check for a valid mode. There is a large 
surprise if python crashes with an access violation when the 
innocent user does innocent things like this. But this is just 
*my* opinion.
msg12786 - (view) Author: Neal Norwitz (nnorwitz) * (Python committer) Date: 2002-11-04 20:58
Logged In: YES 
user_id=33168

Sounds good to me.  Care to work on a patch with tests?  
msg12787 - (view) Author: Tim Peters (tim.peters) * (Python committer) Date: 2002-11-04 22:57
Logged In: YES 
user_id=31435

We generally don't check for valid mode characters 
because C allows implementations to extend the standard 
set, there's no way to query the platform about which mode 
extensions it supports, and we don't want to block users 
from using platform-specific mode extensions.

It would be OK by me if we insisted that the first character 
be in "rwa", but checking more than that is off limits.  Note 
that Windows simply ignores all of the mode chars starting 
with the first one it doesn't recognize:

>>> f = open('example.txt', 'what a crock this mode string 
is!')
>>> f
<open file 'example.txt', mode 'what a crock this mode 
string is!' at 0x00651870
>
>>>

That was the same as passing "w".
msg12788 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2002-11-05 20:40
Logged In: YES 
user_id=11105

Here's a patch for Modules/posixmodule.c, which fixes this 
particular issue, conforming to Tim's requirements.
msg12789 - (view) Author: Tim Peters (tim.peters) * (Python committer) Date: 2002-11-05 21:06
Logged In: YES 
user_id=31435

Cool!  One thing:  drop the Windows #ifdef.  I asked Guido, 
and he agrees that Python wants to enforce this requirement 
on all platforms.
msg12790 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2002-11-05 21:12
Logged In: YES 
user_id=11105

Great, will do this tomorrow. What about socketmodule.c, 
which Neal mentioned?
msg12791 - (view) Author: Tim Peters (tim.peters) * (Python committer) Date: 2002-11-05 21:14
Logged In: YES 
user_id=31435

If socketmodule isn't crashing, I'd leave it alone.
msg12792 - (view) Author: Neal Norwitz (nnorwitz) * (Python committer) Date: 2002-11-05 22:33
Logged In: YES 
user_id=33168

Thomas, I belivee the code below will check if the other
cases crash.

# test posixmodule.popen(), 
# would need check around line 2835
# as first code in popen()
import posix
# you may need a command that works, 
# I'm guessing cmd.exe is ok
posix.popen('cmd.exe', '.zip')

# test socketmodule.sock_makefile(), 
# would need check around line 1572
# after PyArg_ParseTuple
from socket import *
s = socket(AF_INET, SOCK_STREAM)
s.makefile('.zip')
msg12793 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2002-11-07 16:03
Logged In: YES 
user_id=11105

I couldn't get it to crash with Neil's code, so I checked it in 
without the Windows #ifdef: posixmodule.c, rev 2.271.

BTW: I always assume we don't need NEWS entries for bug 
fixes, is this correct?
msg12794 - (view) Author: Tim Peters (tim.peters) * (Python committer) Date: 2002-11-07 16:08
Logged In: YES 
user_id=31435

Thanks!  You certainly need a NEWS item for this, and 
possibly even a doc change, since requiring that mode 
strings begin with certain letters is a new language 
requirement.  However unlikely, *somebody* may have code 
out there that will break because of it.
msg12795 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2002-11-07 16:12
Logged In: YES 
user_id=11105

Sigh, even more work.
In this case, it cannot be called a bugfix anymore...
History
Date User Action Args
2022-04-10 16:05:45adminsetgithub: 37324
2002-10-15 09:54:30thellercreate