if isinstance(value, datetime):
return value.strftime(self.fmt).encode("ascii")
if isinstance(value, binary_type):
- value_decoded = value.decode("ascii")
+ try:
+ value_decoded = value.decode("ascii")
+ except (UnicodeEncodeError, UnicodeDecodeError) as err:
+ raise DecodeError("invalid UTCTime encoding")
if len(value_decoded) == LEN_YYMMDDHHMMSSZ:
try:
datetime.strptime(value_decoded, self.fmt)
self.fmt_ms if value.microsecond > 0 else self.fmt
).encode("ascii")
if isinstance(value, binary_type):
- value_decoded = value.decode("ascii")
+ try:
+ value_decoded = value.decode("ascii")
+ except (UnicodeEncodeError, UnicodeDecodeError) as err:
+ raise DecodeError("invalid GeneralizedTime encoding")
if len(value_decoded) == LEN_YYYYMMDDHHMMSSZ:
try:
datetime.strptime(value_decoded, self.fmt)
datetime(2010, 1, 2, 3, 4, 5, 0),
)
+ def test_encoding(self):
+ raw = GeneralizedTime(b"20100102030405Z").encode()
+ with assertRaisesRegex(self, DecodeError, "encoding"):
+ GeneralizedTime().decode(raw.replace(b"201001", "привет".encode("utf-8")))
+ with self.assertRaises(DecodeError):
+ GeneralizedTime().decode(raw.replace(b"20100", b"hello"))
+
class TestUTCTime(TimeMixin, CommonMixin, TestCase):
base_klass = UTCTime
1900 + year,
)
+ def test_encoding(self):
+ raw = UTCTime(b"910506234540Z").encode()
+ with assertRaisesRegex(self, DecodeError, "encoding"):
+ UTCTime().decode(raw.replace(b"910506", "привет".encode("utf-8")))
+ with self.assertRaises(DecodeError):
+ UTCTime().decode(raw.replace(b"91050", b"hello"))
+
@composite
def any_values_strategy(draw, do_expl=False):