]> Cypherpunks.ru repositories - pyderasn.git/commitdiff
Fully strict integers validation in *Time 6.2
authorSergey Matveev <stargrave@stargrave.org>
Mon, 10 Feb 2020 09:38:17 +0000 (12:38 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Mon, 10 Feb 2020 09:46:43 +0000 (12:46 +0300)
VERSION
doc/install.rst
doc/news.rst
pyderasn.py
tests/test_pyderasn.py

diff --git a/VERSION b/VERSION
index a435f5a56faa6e29186dab89b1fa66313aebbe87..0cda48ac61e44f699a1d03998ae51baef9cb01be 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-6.1
+6.2
index bd3adc8a34ac415055bcd7e778c8186b5c802810..9c21d284c62bdf545ef33d42a0751e8a00fbff21 100644 (file)
@@ -4,11 +4,11 @@ Install
 Preferable way is to :ref:`download <download>` tarball with the
 signature from `official website <http://pyderasn.cypherpunks.ru/>`__::
 
-    $ [fetch|wget] http://pyderasn.cypherpunks.ru/pyderasn-6.1.tar.xz
-    $ [fetch|wget] http://pyderasn.cypherpunks.ru/pyderasn-6.1.tar.xz.sig
-    $ gpg --verify pyderasn-6.1.tar.xz.sig pyderasn-6.1.tar.xz
-    $ xz --decompress --stdout pyderasn-6.1.tar.xz | tar xf -
-    $ cd pyderasn-6.1
+    $ [fetch|wget] http://pyderasn.cypherpunks.ru/pyderasn-6.2.tar.xz
+    $ [fetch|wget] http://pyderasn.cypherpunks.ru/pyderasn-6.2.tar.xz.sig
+    $ gpg --verify pyderasn-6.2.tar.xz.sig pyderasn-6.2.tar.xz
+    $ xz --decompress --stdout pyderasn-6.2.tar.xz | tar xf -
+    $ cd pyderasn-6.2
     $ python setup.py install
     # or copy pyderasn.py (+six.py, possibly termcolor.py) to your PYTHONPATH
 
@@ -19,7 +19,7 @@ You can also find it mirrored on :ref:`download <download>` page.
 You could use pip (**no** OpenPGP authentication is performed!) with PyPI::
 
     $ cat > requirements.txt <<EOF
-    pyderasn==6.1 --hash=sha256:TO-BE-FILLED
+    pyderasn==6.2 --hash=sha256:TO-BE-FILLED
     six==1.14.0 --hash=sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a
     EOF
     $ pip install --requirement requirements.txt
index 54bf5c77f4e932c068015bd84fb3e3e7691138fa..baa159db83147b810f9b15b0cc4742ae18cf12e1 100644 (file)
@@ -1,6 +1,13 @@
 News
 ====
 
+.. _release6.2:
+
+6.2
+---
+* Python ``int()``'s accepts even more various non-decimal characters
+  than expected. Make validation fully strict, without relying in ``int()``
+
 .. _release6.1:
 
 6.1
index ea26eb036a4209c78b8b87921816579f2d182a54..1dbfce06b77ab0f939ade75300b0f1c5ed145637 100755 (executable)
@@ -690,7 +690,7 @@ except ImportError:  # pragma: no cover
     def colored(what, *args, **kwargs):
         return what
 
-__version__ = "6.1"
+__version__ = "6.2"
 
 __all__ = (
     "Any",
@@ -765,15 +765,15 @@ EOC_LEN = len(EOC)
 LENINDEF = b"\x80"  # length indefinite mark
 LENINDEF_PP_CHAR = "I" if PY2 else "∞"
 NAMEDTUPLE_KWARGS = {} if PY2 else {"module": __name__}
-SET01 = frozenset(("0", "1"))
+SET01 = frozenset("01")
+DECIMALS = frozenset("0123456789")
 DECIMAL_SIGNS = ".,"
 
 
 def pureint(value):
-    i = int(value)
-    if (value[0] in "+- ") or (value[-1] == " "):
+    if not set(value) <= DECIMALS:
         raise ValueError("non-pure integer")
-    return i
+    return int(value)
 
 def fractions2float(fractions_raw):
     pureint(fractions_raw)
index b7ee9a9da9571a1f29b2a8feac0ae9ac9166a11a..1c2f9b037bf47c1279056344b9fb07b91f784505 100644 (file)
@@ -4305,6 +4305,14 @@ class TestGeneralizedTime(TimeMixin, CommonMixin, TestCase):
                 b"200001020304+5Z",
                 b"20000102030405.+6Z",
                 b"20000102030405.-6Z",
+                b"_2000102030405Z",
+                b"2000_102030405Z",
+                b"200001_2030405Z",
+                b"20000102_30405Z",
+                b"2000010203_405Z",
+                b"200001020304_5Z",
+                b"20000102030405._6Z",
+                b"20000102030405.6_Z",
                 b" 2000102030405Z",
                 b"2000 102030405Z",
                 b"200001 2030405Z",
@@ -4406,6 +4414,13 @@ class TestUTCTime(TimeMixin, CommonMixin, TestCase):
                 b"000102+30405Z",
                 b"00010203+405Z",
                 b"0001020304+5Z",
+                b"_10102030405Z",
+                b"00_102030405Z",
+                b"0001_2030405Z",
+                b"000102_30405Z",
+                b"00010203_405Z",
+                b"0001020304_5Z",
+                b"00010203045_Z",
                 b" 10102030405Z",
                 b"00 102030405Z",
                 b"0001 2030405Z",