From ab32066e65f67e14b3af4ed61333ed083446b225 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Mon, 30 Jan 2012 15:17:33 -0800 Subject: Fix zip_import.c's read_directory() to use appropriate types for the values being read from the header vs the values being used by fseek and ftell (Py_ssize_t for those) and how they are computed. Py_ssize_t is used for actual file offsets so that files greater than 2gigs could be supported. Updates the Py_BuildValue format string to match (including several existing wrong 'i's that should have been 'l's). --- Modules/zipimport.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Modules/zipimport.c b/Modules/zipimport.c index 11c3904..d8c3d8a 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -714,15 +714,16 @@ read_directory(PyObject *archive_obj) PyObject *files = NULL; FILE *fp; unsigned short flags; - long compress, crc, data_size, file_size, file_offset, date, time; - long header_offset, name_size, header_size, header_position; + short compress, time, date, name_size; + long crc, data_size, file_size, header_size; + Py_ssize_t file_offset, header_position, header_offset; long i, l, count; size_t length; Py_UNICODE path[MAXPATHLEN + 5]; char name[MAXPATHLEN + 5]; PyObject *nameobj = NULL; char *p, endof_central_dir[22]; - long arc_offset; /* offset from beginning of file to start of zip-archive */ + Py_ssize_t arc_offset; /* Absolute offset to start of the zip-archive. */ PyObject *pathobj; const char *charset; int bootstrap; @@ -832,7 +833,7 @@ read_directory(PyObject *archive_obj) pathobj = PyUnicode_FromUnicode(path, Py_UNICODE_strlen(path)); if (pathobj == NULL) goto error; - t = Py_BuildValue("Niiiiiii", pathobj, compress, data_size, + t = Py_BuildValue("Nhllnhhl", pathobj, compress, data_size, file_size, file_offset, time, date, crc); if (t == NULL) goto error; -- cgit v0.12 From da4c46721066ee44843372e8bf57c6c81dec8e4a Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Tue, 31 Jan 2012 02:26:32 -0500 Subject: #13506 Add '' to path for interactive interpreter by adding with_cwd parameter to PyShell.PyShell.transfer_path() and changing elsewhere as needed. Original patches by Marco Scataglini and Roger Serwy. --- Lib/idlelib/PyShell.py | 19 +++++++++++++------ Lib/idlelib/ScriptBinding.py | 5 ++--- Misc/ACKS | 3 ++- Misc/NEWS | 3 +++ 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py index e7c71b7..26f1e53 100644 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -411,11 +411,11 @@ class ModifiedInterpreter(InteractiveInterpreter): self.rpcclt.register("flist", self.tkconsole.flist) self.rpcclt.register("linecache", linecache) self.rpcclt.register("interp", self) - self.transfer_path() + self.transfer_path(with_cwd=True) self.poll_subprocess() return self.rpcclt - def restart_subprocess(self): + def restart_subprocess(self, with_cwd=False): if self.restarting: return self.rpcclt self.restarting = True @@ -439,7 +439,7 @@ class ModifiedInterpreter(InteractiveInterpreter): except socket.timeout as err: self.display_no_subprocess_error() return None - self.transfer_path() + self.transfer_path(with_cwd=with_cwd) # annotate restart in shell window and mark it console.text.delete("iomark", "end-1c") if was_executing: @@ -488,12 +488,18 @@ class ModifiedInterpreter(InteractiveInterpreter): except OSError: return - def transfer_path(self): + def transfer_path(self, with_cwd=False): + if with_cwd: # Issue 13506 + path = [''] # include Current Working Directory + path.extend(sys.path) + else: + path = sys.path + self.runcommand("""if 1: import sys as _sys _sys.path = %r del _sys - \n""" % (sys.path,)) + \n""" % (path,)) active_seq = None @@ -1187,7 +1193,8 @@ class PyShell(OutputWindow): self.text.see("restart") def restart_shell(self, event=None): - self.interp.restart_subprocess() + "Callback for Run/Restart Shell Cntl-F6" + self.interp.restart_subprocess(with_cwd=True) def showprompt(self): self.resetoutput() diff --git a/Lib/idlelib/ScriptBinding.py b/Lib/idlelib/ScriptBinding.py index 26becce..18ce965 100644 --- a/Lib/idlelib/ScriptBinding.py +++ b/Lib/idlelib/ScriptBinding.py @@ -144,10 +144,9 @@ class ScriptBinding: return 'break' if not self.tabnanny(filename): return 'break' - shell = self.shell - interp = shell.interp + interp = self.shell.interp if PyShell.use_subprocess: - shell.restart_shell() + interp.restart_subprocess(with_cwd=False) dirname = os.path.dirname(filename) # XXX Too often this discards arguments the user just set... interp.runcommand("""if 1: diff --git a/Misc/ACKS b/Misc/ACKS index 48df3fb..ccc1fec 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -806,6 +806,7 @@ Mark Sapiro Ty Sarna Ben Sayer sbt +Marco Scataglini Andrew Schaaf Michael Scharf Andreas Schawo @@ -830,7 +831,7 @@ Nick Seidenman Yury Selivanov Fred Sells Jiwon Seo -Roger D. Serwy +Roger Serwy Jerry Seutter Denis Severson Ian Seyer diff --git a/Misc/NEWS b/Misc/NEWS index 40a4495..2f552c3 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -113,6 +113,9 @@ Core and Builtins Library ------- +- Issue #13506: Add '' to path for IDLE Shell when started and restarted with Restart Shell. + Original patches by Marco Scataglini and Roger Serwy. + - Issue #13848: open() and the FileIO constructor now check for NUL characters in the file name. Patch by Hynek Schlawack. -- cgit v0.12 From 4d82ade42471e0503d82012116d0b128d7120f7f Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Tue, 31 Jan 2012 02:57:29 -0500 Subject: whitespace --- Lib/idlelib/PyShell.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py index 26f1e53..6bf0a8c 100644 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -494,7 +494,7 @@ class ModifiedInterpreter(InteractiveInterpreter): path.extend(sys.path) else: path = sys.path - + self.runcommand("""if 1: import sys as _sys _sys.path = %r -- cgit v0.12