Skip to content

Commit a0ba076

Browse files
andrewrabertmethane
authored andcommitted
Fix encoding and unicode_errors (#277)
Previously, unicode_errors was either set to NULL or to the result of PyBytes_AsString. This restores that behavior while also keeping the existing NULL default behavior. Original defaults were restored to keep API compatibility until these deprecated options are finally removed.
1 parent 52fb85a commit a0ba076

File tree

1 file changed

+16
-17
lines changed

1 file changed

+16
-17
lines changed

msgpack/_packer.pyx

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -127,27 +127,26 @@ cdef class Packer(object):
127127
if not PyCallable_Check(default):
128128
raise TypeError("default must be a callable.")
129129
self._default = default
130-
if encoding is None:
131-
if unicode_errors is None:
132-
self.encoding = NULL
133-
self.unicode_errors = NULL
134-
else:
135-
self.encoding = "utf_8"
136-
self.unicode_errors = unicode_errors
130+
if encoding is None and unicode_errors is None:
131+
self.encoding = NULL
132+
self.unicode_errors = NULL
137133
else:
138-
if isinstance(encoding, unicode):
139-
self._bencoding = encoding.encode('ascii')
134+
if encoding is None:
135+
self.encoding = 'utf-8'
140136
else:
141-
self._bencoding = encoding
142-
self.encoding = PyBytes_AsString(self._bencoding)
143-
if isinstance(unicode_errors, unicode):
144-
self._berrors = unicode_errors.encode('ascii')
137+
if isinstance(encoding, unicode):
138+
self._bencoding = encoding.encode('ascii')
139+
else:
140+
self._bencoding = encoding
141+
self.encoding = PyBytes_AsString(self._bencoding)
142+
if unicode_errors is None:
143+
self.unicode_errors = 'strict'
145144
else:
146-
self._berrors = unicode_errors
147-
if self._berrors is not None:
145+
if isinstance(unicode_errors, unicode):
146+
self._berrors = unicode_errors.encode('ascii')
147+
else:
148+
self._berrors = unicode_errors
148149
self.unicode_errors = PyBytes_AsString(self._berrors)
149-
else:
150-
self.unicode_errors = NULL
151150

152151
def __dealloc__(self):
153152
PyMem_Free(self.pk.buf)

0 commit comments

Comments
 (0)