]> Cypherpunks.ru repositories - pyderasn.git/commitdiff
Check for DEFAULTed value also in SET
authorSergey Matveev <stargrave@stargrave.org>
Mon, 10 Sep 2018 09:51:40 +0000 (12:51 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Mon, 10 Sep 2018 14:52:25 +0000 (17:52 +0300)
VERSION
doc/news.rst
pyderasn.py
tests/test_pyderasn.py

diff --git a/VERSION b/VERSION
index 6324d401a069f4020efcf0ff07442724b52f47c2..93a848f9688291c7b2172cf99f133675225ad282 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.14
+3.15
index 81db4f5c87a7a79b0cfafa838166b16599e5847c..4224b3d17338e55f209efa792f3de5e3439dcdb2 100644 (file)
@@ -1,6 +1,12 @@
 News
 ====
 
+.. _release3.15:
+
+3.15
+----
+* DEFAULT-encoded value is checked also for Set-s, not for Sequences only
+
 .. _release3.14:
 
 3.14
index 6db8017e12a60a7d7ddfa4202514c31f808bd39e..7edfc8064c2c0571404e2449a7906ea745ffd264 100755 (executable)
@@ -4803,9 +4803,18 @@ class Set(Sequence):
             sub_offset += value_len
             vlen += value_len
             v = v_tail
-            if spec.default is None or value != spec.default:  # pragma: no cover
-                # SeqMixing.test_encoded_default_accepted covers that place
+            if spec.default is None:
                 values[name] = value
+            else:
+                if value != spec.default:
+                    values[name] = value
+                if ctx.get("strict_default_existence", False):
+                    raise DecodeError(
+                        "DEFAULT value met",
+                        klass=self.__class__,
+                        decode_path=sub_decode_path,
+                        offset=sub_offset,
+                    )
         obj = self.__class__(
             schema=self.specs,
             impl=self.tag,
index adad7e9b88f9ef475e7e56b1d2f7931b836b7541..7b397f2686d6cbd174db9864de7ea593035d48b2 100644 (file)
@@ -5871,18 +5871,18 @@ class TestStrictDefaultExistence(TestCase):
             ("int%d" % i, Integer(expl=tag_ctxc(i + 1)))
             for i in range(count)
         ]
-
-        class Seq(Sequence):
-            schema = _schema
-        seq = Seq()
-        for i in range(count):
-            seq["int%d" % i] = Integer(123)
-        raw = seq.encode()
-        chosen = "int%d" % chosen
-        seq.specs[chosen] = seq.specs[chosen](default=123)
-        seq.decode(raw)
-        with assertRaisesRegex(self, DecodeError, "DEFAULT value met"):
-            seq.decode(raw, ctx={"strict_default_existence": True})
+        for klass in (Sequence, Set):
+            class Seq(klass):
+                schema = _schema
+            seq = Seq()
+            for i in range(count):
+                seq["int%d" % i] = Integer(123)
+            raw = seq.encode()
+            chosen_choice = "int%d" % chosen
+            seq.specs[chosen_choice] = seq.specs[chosen_choice](default=123)
+            seq.decode(raw)
+            with assertRaisesRegex(self, DecodeError, "DEFAULT value met"):
+                seq.decode(raw, ctx={"strict_default_existence": True})
 
 
 class TestX690PrefixedType(TestCase):