Author: Ronan Lamy <ronan.l...@gmail.com> Branch: follow_symlinks Changeset: r83776:ad52aafa4b6e Date: 2016-04-19 20:22 +0100 http://bitbucket.org/pypy/pypy/changeset/ad52aafa4b6e/
Log: (pjenvey, ronan) Query the buffer protocol in space.fsencode_w, not space.bytes_w, and ensure that this is used everywhere in interp_posix.py. reverts 4b64950d0558898460fd9c7c126c085c1a6bdbfe diff --git a/pypy/interpreter/baseobjspace.py b/pypy/interpreter/baseobjspace.py --- a/pypy/interpreter/baseobjspace.py +++ b/pypy/interpreter/baseobjspace.py @@ -231,8 +231,7 @@ raise BufferInterfaceNotFound def bytes_w(self, space): - buffer = space.buffer_w(self, space.BUF_FULL_RO) - return buffer.as_str() + self._typed_unwrap_error(space, "bytes") def unicode_w(self, space): self._typed_unwrap_error(space, "string") @@ -1639,9 +1638,14 @@ return fsdecode(space, w_obj) def fsencode_w(self, w_obj): + from rpython.rlib import rstring if self.isinstance_w(w_obj, self.w_unicode): w_obj = self.fsencode(w_obj) - return self.bytes0_w(w_obj) + result = self.bufferstr_w(w_obj, self.BUF_FULL_RO) + if '\x00' in result: + raise oefmt(self.w_TypeError, + "argument must be a string without NUL characters") + return rstring.assert_str0(result) def fsdecode_w(self, w_obj): if self.isinstance_w(w_obj, self.w_bytes): diff --git a/pypy/module/posix/interp_posix.py b/pypy/module/posix/interp_posix.py --- a/pypy/module/posix/interp_posix.py +++ b/pypy/module/posix/interp_posix.py @@ -64,7 +64,7 @@ self.w_obj = w_obj def as_bytes(self): - return self.space.bytes0_w(self.w_obj) + return self.space.fsencode_w(self.w_obj) def as_unicode(self): return self.space.fsdecode_w(self.w_obj) @@ -83,7 +83,7 @@ fname = FileEncoder(space, w_fname) return func(fname, *args) else: - fname = space.bytes0_w(w_fname) + fname = space.fsencode_w(w_fname) return func(fname, *args) return dispatch _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit