Index: Lib/zipfile.py =================================================================== --- Lib/zipfile.py (revision 74541) +++ Lib/zipfile.py (working copy) @@ -504,11 +504,6 @@ def _checkfornewline(self): nl, nllen = -1, -1 if self.linebuffer: - # ugly check for cases where half of an \r\n pair was - # read on the last pass, and the \r was discarded. In this - # case we just throw away the \n at the start of the buffer. - if (self.lastdiscard, self.linebuffer[0]) == ('\r','\n'): - self.linebuffer = self.linebuffer[1:] for sep in self.nlSeps: nl = self.linebuffer.find(sep) @@ -553,9 +548,7 @@ s = self.linebuffer self.linebuffer = '' return s - buf = self.linebuffer[:nl] - self.lastdiscard = self.linebuffer[nl:nl + nllen] self.linebuffer = self.linebuffer[nl + nllen:] # line is always returned with \n as newline char (except possibly @@ -633,6 +626,17 @@ self.readbuffer += newdata + if self.readbuffer and self.univ_newlines: + # case where the buffer ends between an \r and \n + if (self.lastdiscard, self.readbuffer[0]) == ('\r', '\n'): + self.readbuffer = self.readbuffer[1:] + if self.readbuffer[-1] == '\r': + self.lastdiscard = self.readbuffer[-1] + else: + self.lastdiscard = None + for sep in self.nlSeps: + if (sep != '\n'): + self.readbuffer = self.readbuffer.replace(sep, '\n') # return what the user asked for if size is None or len(self.readbuffer) <= size: Index: Lib/test/test_zipfile.py =================================================================== --- Lib/test/test_zipfile.py (revision 74541) +++ Lib/test/test_zipfile.py (working copy) @@ -1087,7 +1087,8 @@ zipfp = zipfile.ZipFile(f, "r") for sep, fn in self.arcfiles.items(): zipdata = zipfp.open(fn, "rU").read() - self.assertEqual(self.arcdata[sep], zipdata) + b = self.arcdata[sep].replace(sep, "\n") + self.assertEqual(b, zipdata) zipfp.close()

AltStyle によって変換されたページ (->オリジナル) /