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)
