Author: Brian Kearns <[email protected]>
Branch: 
Changeset: r62255:7be6c0646eb4
Date: 2013-03-08 17:19 -0500
http://bitbucket.org/pypy/pypy/changeset/7be6c0646eb4/

Log:    test and fix datetime unpickle checking of tzinfo arg

diff --git a/lib_pypy/datetime.py b/lib_pypy/datetime.py
--- a/lib_pypy/datetime.py
+++ b/lib_pypy/datetime.py
@@ -1425,7 +1425,10 @@
             ord(string[0]), ord(string[1]), ord(string[2]),
             ord(string[3]), ord(string[4]), ord(string[5]))
         self._microsecond = (((us1 << 8) | us2) << 8) | us3
-        self._tzinfo = tzinfo
+        if tzinfo is None or isinstance(tzinfo, _tzinfo_class):
+            self._tzinfo = tzinfo
+        else:
+            raise TypeError("bad tzinfo state arg")
 
     def __reduce__(self):
         return (time, self._getstate())
@@ -1922,7 +1925,10 @@
                 ord(string[7]), ord(string[8]), ord(string[9]))
         self._year = yhi * 256 + ylo
         self._microsecond = (((us1 << 8) | us2) << 8) | us3
-        self._tzinfo = tzinfo
+        if tzinfo is None or isinstance(tzinfo, _tzinfo_class):
+            self._tzinfo = tzinfo
+        else:
+            raise TypeError("bad tzinfo state arg")
 
     def __reduce__(self):
         return (self.__class__, self._getstate())
diff --git a/pypy/module/test_lib_pypy/test_datetime.py 
b/pypy/module/test_lib_pypy/test_datetime.py
--- a/pypy/module/test_lib_pypy/test_datetime.py
+++ b/pypy/module/test_lib_pypy/test_datetime.py
@@ -25,6 +25,16 @@
     e = raises(TypeError, datetime.datetime, '123')
     assert e.value.args[0] == 'an integer is required'
 
+    datetime.time('\x01' * 6, None)
+    with raises(TypeError) as e:
+        datetime.time('\x01' * 6, 123)
+    assert str(e.value) == "bad tzinfo state arg"
+
+    datetime.datetime('\x01' * 10, None)
+    with raises(TypeError) as e:
+        datetime.datetime('\x01' * 10, 123)
+    assert str(e.value) == "bad tzinfo state arg"
+
 def test_strptime():
     import time, sys
     if sys.version_info < (2, 6):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to