Hello community,

here is the log from the commit of package python-pyasn1 for openSUSE:Factory 
checked in at 2017-09-25 13:54:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pyasn1 (Old)
 and      /work/SRC/openSUSE:Factory/.python-pyasn1.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pyasn1"

Mon Sep 25 13:54:49 2017 rev:32 rq:528027 version:0.3.6

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pyasn1/python-pyasn1.changes      
2017-09-21 12:27:25.385924275 +0200
+++ /work/SRC/openSUSE:Factory/.python-pyasn1.new/python-pyasn1.changes 
2017-09-25 13:54:50.881400312 +0200
@@ -1,0 +2,12 @@
+Thu Sep 21 11:08:33 UTC 2017 - [email protected]
+
+- updated to upstream release 0.3.6
+
+  * End-of-octets encoding optimized at ASN.1 encoders
+  * The __getitem__/__setitem__ behavior of Set/Sequence and
+    SetOf/SequenceOf objects aligned with the canonical Mapping
+    and Sequence protocols in part
+  * Fixed crash in ASN.1 encoder when encoding an explicitly tagged
+    component of a Sequence
+
+-------------------------------------------------------------------

Old:
----
  pyasn1-0.3.5.tar.gz

New:
----
  pyasn1-0.3.6.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pyasn1.spec ++++++
--- /var/tmp/diff_new_pack.dpyQGb/_old  2017-09-25 13:54:51.529309153 +0200
+++ /var/tmp/diff_new_pack.dpyQGb/_new  2017-09-25 13:54:51.529309153 +0200
@@ -20,7 +20,7 @@
 %define oldpython python
 Name:           python-pyasn1
 %global modname pyasn1
-Version:        0.3.5
+Version:        0.3.6
 Release:        0
 Summary:        ASN.1 types and codecs
 License:        BSD-2-Clause

++++++ pyasn1-0.3.5.tar.gz -> pyasn1-0.3.6.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyasn1-0.3.5/CHANGES.rst new/pyasn1-0.3.6/CHANGES.rst
--- old/pyasn1-0.3.5/CHANGES.rst        2017-09-16 23:01:31.000000000 +0200
+++ new/pyasn1-0.3.6/CHANGES.rst        2017-09-20 22:26:33.000000000 +0200
@@ -1,4 +1,13 @@
 
+Revision 0.3.6, released 21-09-2017
+-----------------------------------
+
+- End-of-octets encoding optimized at ASN.1 encoders
+- The __getitem__/__setitem__ behavior of Set/Sequence and SetOf/SequenceOf
+  objects aligned with the canonical Mapping and Sequence protocols in part
+- Fixed crash in ASN.1 encoder when encoding an explicitly tagged
+  component of a Sequence
+
 Revision 0.3.5, released 16-09-2017
 -----------------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyasn1-0.3.5/PKG-INFO new/pyasn1-0.3.6/PKG-INFO
--- old/pyasn1-0.3.5/PKG-INFO   2017-09-17 00:21:41.000000000 +0200
+++ new/pyasn1-0.3.6/PKG-INFO   2017-09-20 22:36:17.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pyasn1
-Version: 0.3.5
+Version: 0.3.6
 Summary: ASN.1 types and codecs
 Home-page: https://github.com/etingof/pyasn1
 Author: Ilya Etingof <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyasn1-0.3.5/pyasn1/__init__.py 
new/pyasn1-0.3.6/pyasn1/__init__.py
--- old/pyasn1-0.3.5/pyasn1/__init__.py 2017-09-16 23:01:31.000000000 +0200
+++ new/pyasn1-0.3.6/pyasn1/__init__.py 2017-09-20 22:21:52.000000000 +0200
@@ -1,7 +1,7 @@
 import sys
 
 # http://www.python.org/dev/peps/pep-0396/
-__version__ = '0.3.5'
+__version__ = '0.3.6'
 
 if sys.version_info[:2] < (2, 4):
     raise RuntimeError('PyASN1 requires Python 2.4 or later')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyasn1-0.3.5/pyasn1/codec/ber/encoder.py 
new/pyasn1-0.3.6/pyasn1/codec/ber/encoder.py
--- old/pyasn1-0.3.5/pyasn1/codec/ber/encoder.py        2017-09-16 
23:01:31.000000000 +0200
+++ new/pyasn1-0.3.6/pyasn1/codec/ber/encoder.py        2017-09-20 
22:21:52.000000000 +0200
@@ -16,6 +16,10 @@
 class AbstractItemEncoder(object):
     supportIndefLenMode = 1
 
+    # An outcome of otherwise legit call `encodeFun(eoo.endOfOctets)`
+    eooIntegerSubstrate = (0, 0)
+    eooOctetsSubstrate = ints2octs(eooIntegerSubstrate)
+
     # noinspection PyMethodMayBeStatic
     def encodeTag(self, singleTag, isConstructed):
         tagClass, tagFormat, tagId = singleTag
@@ -85,11 +89,18 @@
 
             if isOctets:
                 substrate = ints2octs(header) + substrate
+
+                if not defModeOverride:
+                    substrate += self.eooOctetsSubstrate
+
             else:
-                substrate = ints2octs(header + substrate)
+                substrate = header + substrate
 
-            if not defModeOverride:
-                substrate += encodeFun(eoo.endOfOctets, 
defMode=defModeOverride)
+                if not defModeOverride:
+                    substrate += self.eooIntegerSubstrate
+
+        if not isOctets:
+            substrate = ints2octs(substrate)
 
         return substrate
 
@@ -506,6 +517,7 @@
 
         if logger:
             logger('codec %s built %s octets of substrate: %s\nencoder 
completed' % (concreteEncoder, len(substrate), debug.hexdump(substrate)))
+
         return substrate
 
 #: Turns ASN.1 object into BER octet stream.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyasn1-0.3.5/pyasn1/type/base.py 
new/pyasn1-0.3.6/pyasn1/type/base.py
--- old/pyasn1-0.3.5/pyasn1/type/base.py        2017-09-16 23:01:31.000000000 
+0200
+++ new/pyasn1-0.3.6/pyasn1/type/base.py        2017-09-20 22:20:21.000000000 
+0200
@@ -586,12 +586,6 @@
             self[k] = kwargs[k]
         return self
 
-    def __getitem__(self, idx):
-        return self.getComponentByPosition(idx)
-
-    def __setitem__(self, idx, value):
-        self.setComponentByPosition(idx, value)
-
     def __len__(self):
         return len(self._componentValues)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyasn1-0.3.5/pyasn1/type/univ.py 
new/pyasn1-0.3.6/pyasn1/type/univ.py
--- old/pyasn1-0.3.5/pyasn1/type/univ.py        2017-09-16 23:01:31.000000000 
+0200
+++ new/pyasn1-0.3.6/pyasn1/type/univ.py        2017-09-20 22:21:52.000000000 
+0200
@@ -1729,6 +1729,20 @@
 
     # Python list protocol
 
+    def __getitem__(self, idx):
+        try:
+            return self.getComponentByPosition(idx)
+
+        except error.PyAsn1Error:
+            raise IndexError(sys.exc_info()[1])
+
+    def __setitem__(self, idx, value):
+        try:
+            self.setComponentByPosition(idx, value)
+
+        except error.PyAsn1Error:
+            raise IndexError(sys.exc_info()[1])
+
     def clear(self):
         self._componentValues = []
 
@@ -1745,7 +1759,11 @@
     def index(self, value, start=0, stop=None):
         if stop is None:
             stop = len(self)
-        return self._componentValues.index(value, start, stop)
+        try:
+            return self._componentValues.index(value, start, stop)
+
+        except error.PyAsn1Error:
+            raise ValueError(sys.exc_info()[1])
 
     def reverse(self):
         self._componentValues.reverse()
@@ -2062,15 +2080,37 @@
 
     def __getitem__(self, idx):
         if octets.isStringType(idx):
-            return self.getComponentByName(idx)
+            try:
+                return self.getComponentByName(idx)
+
+            except error.PyAsn1Error:
+                # duck-typing dict
+                raise KeyError(sys.exc_info()[1])
+
         else:
-            return base.AbstractConstructedAsn1Item.__getitem__(self, idx)
+            try:
+                return self.getComponentByPosition(idx)
+
+            except error.PyAsn1Error:
+                # duck-typing list
+                raise IndexError(sys.exc_info()[1])
 
     def __setitem__(self, idx, value):
         if octets.isStringType(idx):
-            self.setComponentByName(idx, value)
+            try:
+                self.setComponentByName(idx, value)
+
+            except error.PyAsn1Error:
+                # duck-typing dict
+                raise KeyError(sys.exc_info()[1])
+
         else:
-            base.AbstractConstructedAsn1Item.__setitem__(self, idx, value)
+            try:
+                self.setComponentByPosition(idx, value)
+
+            except error.PyAsn1Error:
+                # duck-typing list
+                raise IndexError(sys.exc_info()[1])
 
     def __contains__(self, key):
         if self._componentTypeLen:
@@ -2258,7 +2298,7 @@
             currentValue = noValue
             if componentTypeLen:
                 if componentTypeLen < idx:
-                    raise IndexError('component index out of range')
+                    raise error.PyAsn1Error('component index out of range')
                 self._componentValues = [noValue] * componentTypeLen
 
         if value is noValue:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyasn1-0.3.5/pyasn1.egg-info/PKG-INFO 
new/pyasn1-0.3.6/pyasn1.egg-info/PKG-INFO
--- old/pyasn1-0.3.5/pyasn1.egg-info/PKG-INFO   2017-09-17 00:21:41.000000000 
+0200
+++ new/pyasn1-0.3.6/pyasn1.egg-info/PKG-INFO   2017-09-20 22:36:17.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pyasn1
-Version: 0.3.5
+Version: 0.3.6
 Summary: ASN.1 types and codecs
 Home-page: https://github.com/etingof/pyasn1
 Author: Ilya Etingof <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyasn1-0.3.5/tests/codec/ber/test_encoder.py 
new/pyasn1-0.3.6/tests/codec/ber/test_encoder.py
--- old/pyasn1-0.3.5/tests/codec/ber/test_encoder.py    2017-09-17 
00:16:04.000000000 +0200
+++ new/pyasn1-0.3.6/tests/codec/ber/test_encoder.py    2017-09-20 
22:21:52.000000000 +0200
@@ -655,6 +655,26 @@
         ) == ints2octs((101, 128, 48, 128, 2, 1, 12, 0, 0, 0, 0))
 
 
+class ExpTaggedSequenceComponentEncoderTestCase(BaseTestCase):
+    def setUp(self):
+        BaseTestCase.setUp(self)
+        self.s = univ.Sequence(
+            componentType=namedtype.NamedTypes(
+                namedtype.NamedType('number', 
univ.Boolean().subtype(explicitTag=tag.Tag(tag.tagClassContext, 
tag.tagFormatSimple, 0))),
+            )
+        )
+
+        self.s[0] = True
+
+    def testDefMode(self):
+        assert encoder.encode(self.s) == ints2octs((48, 5, 160, 3, 1, 1, 1))
+
+    def testIndefMode(self):
+        assert encoder.encode(
+            self.s, defMode=False
+        ) == ints2octs((48, 128, 160, 3, 1, 1, 1, 0, 0, 0, 0))
+
+
 class SetEncoderTestCase(BaseTestCase):
     def setUp(self):
         BaseTestCase.setUp(self)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyasn1-0.3.5/tests/type/test_univ.py 
new/pyasn1-0.3.6/tests/type/test_univ.py
--- old/pyasn1-0.3.5/tests/type/test_univ.py    2017-09-16 23:01:31.000000000 
+0200
+++ new/pyasn1-0.3.6/tests/type/test_univ.py    2017-09-20 22:20:21.000000000 
+0200
@@ -896,6 +896,37 @@
         assert self.s1.clone().setComponents('abc', 'def') == \
                self.s1.setComponentByPosition(0, 
'abc').setComponentByPosition(1, 'def')
 
+    def testGetItem(self):
+        s = self.s1.clone()
+        s.append('xxx')
+        assert s[0]
+
+        try:
+            s[2]
+
+        except IndexError:
+            pass
+
+        else:
+            assert False, 'IndexError not raised'
+
+        # this is a deviation from standart sequence protocol
+        assert not s[1]
+
+    def testSetItem(self):
+        s = self.s1.clone()
+        s.append('xxx')
+
+        try:
+
+            s[2] = 'xxx'
+
+        except IndexError:
+            pass
+
+        else:
+            assert False, 'IndexError not raised'
+
     def testAppend(self):
         self.s1.clear()
         self.s1.setComponentByPosition(0, univ.OctetString('abc'))
@@ -1071,6 +1102,54 @@
         assert s[0] == univ.OctetString('')
         assert s[2] == univ.Integer(34)
 
+    def testGetItem(self):
+        s = self.s1.clone()
+        s['name'] = 'xxx'
+        assert s['name']
+        assert s[0]
+
+        try:
+            s['xxx']
+
+        except KeyError:
+            pass
+
+        else:
+            assert False, 'KeyError not raised'
+
+        try:
+            s[100]
+
+        except IndexError:
+            pass
+
+        else:
+            assert False, 'IndexError not raised'
+
+    def testSetItem(self):
+        s = self.s1.clone()
+        s['name'] = 'xxx'
+
+        try:
+
+            s['xxx'] = 'xxx'
+
+        except KeyError:
+            pass
+
+        else:
+            assert False, 'KeyError not raised'
+
+        try:
+
+            s[100] = 'xxx'
+
+        except IndexError:
+            pass
+
+        else:
+            assert False, 'IndexError not raised'
+
     def testIter(self):
         assert list(self.s1) == ['name', 'nick', 'age']
 
@@ -1118,6 +1197,37 @@
 
 class SequenceWithoutSchema(BaseTestCase):
 
+    def testGetItem(self):
+        s = univ.Sequence()
+        s.setComponentByPosition(0, univ.OctetString('abc'))
+        s[0] = 'abc'
+        assert s['field-0']
+        assert s[0]
+
+        try:
+            s['field-1']
+
+        except KeyError:
+            pass
+
+        else:
+            assert False, 'KeyError not raised'
+
+    def testSetItem(self):
+        s = univ.Sequence()
+        s.setComponentByPosition(0, univ.OctetString('abc'))
+        s['field-0'] = 'xxx'
+
+        try:
+
+            s['field-1'] = 'xxx'
+
+        except KeyError:
+            pass
+
+        else:
+            assert False, 'KeyError not raised'
+
     def testIter(self):
         s = univ.Sequence()
         s.setComponentByPosition(0, univ.OctetString('abc'))
@@ -1157,7 +1267,7 @@
         assert list(s.values()) == [str2octs('def'), str2octs('ghi')]
         try:
             s['field-2'] = univ.OctetString('xxx')
-        except error.PyAsn1Error:
+        except KeyError:
             pass
         else:
             assert False, 'unknown field at schema-less object tolerated'
@@ -1390,4 +1500,4 @@
 suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__])
 
 if __name__ == '__main__':
-    unittest.TextTestRunner(verbosity=2).run(suite)
\ No newline at end of file
+    unittest.TextTestRunner(verbosity=2).run(suite)


Reply via email to