Skip to content

Commit

Permalink
pyasn1/coded/ber: Fix regressions dealing component == None
Browse files Browse the repository at this point in the history
since commit 4f644c5

  #!/usr/bin/env python3
  import sys, os.path, io, string
  import base64

  from pyasn1.codec.der.decoder import decode as pyasn1_der_decode

  def main ():
      blob = "fk8wTaADAgEFoQMCAR6kERgPMjAyMzA2MDYxMDAxMTlapQU"\
              "CAwIstqYDAgEsqRUbEzx1bnNwZWNpZmllZCByZWFsbT6qCzAJoAMCAQChAjAA"
      obj, _ = pyasn1_der_decode(base64.b64decode(blob))
  if __name__ == '__main__':
      main()

results in

  File "/home/tux/pyasn1/pyasn1/codec/ber/decoder.py", line 2003, in __call__
    for asn1Object in streamingDecoder:
  File "/home/tux/pyasn1/pyasn1/codec/ber/decoder.py", line 1918, in __iter__
    for asn1Object in self._singleItemDecoder(
  File "/home/tux/pyasn1/pyasn1/codec/ber/decoder.py", line 1778, in __call__
    for value in concreteDecoder.valueDecoder(
  File "/home/tux/pyasn1/pyasn1/codec/ber/decoder.py", line 99, in valueDecoder
    for value in decodeFun(substrate, asn1Spec, tagSet, length, **options):
  File "/home/tux/pyasn1/pyasn1/codec/ber/decoder.py", line 1778, in __call__
    for value in concreteDecoder.valueDecoder(
  File "/home/tux/pyasn1/pyasn1/codec/ber/decoder.py", line 660, in valueDecoder
    for asn1Object in self._decodeComponentsSchemaless(
  File "/home/tux/pyasn1/pyasn1/codec/ber/decoder.py", line 596, in _decodeComponentsSchemaless
    for component in decodeFun(substrate, **options):
  File "/home/tux/pyasn1/pyasn1/codec/ber/decoder.py", line 1778, in __call__
    for value in concreteDecoder.valueDecoder(
  File "/home/tux/pyasn1/pyasn1/codec/ber/decoder.py", line 99, in valueDecoder
    for value in decodeFun(substrate, asn1Spec, tagSet, length, **options):
  File "/home/tux/pyasn1/pyasn1/codec/ber/decoder.py", line 1778, in __call__
    for value in concreteDecoder.valueDecoder(
  File "/home/tux/pyasn1/pyasn1/codec/ber/decoder.py", line 660, in valueDecoder
    for asn1Object in self._decodeComponentsSchemaless(
  File "/home/tux/pyasn1/pyasn1/codec/ber/decoder.py", line 604, in _decodeComponentsSchemaless
    componentTypes.add(component.tagSet)
AttributeError: 'NoneType' object has no attribute 'tagSet'

This change restores the previous code that will avoid this error.

Signed-off-by: Noel Power <noel.power@suse.com>
  • Loading branch information
noelpower committed Jun 6, 2023
1 parent db2ff3b commit 858f463
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion pyasn1/codec/ber/decoder.py
Original file line number Diff line number Diff line change
Expand Up @@ -599,7 +599,9 @@ def _decodeComponentsSchemaless(

if length == -1 and component is eoo.endOfOctets:
break

if component == None:
# TODO: Not an error in this case?
break
components.append(component)
componentTypes.add(component.tagSet)

Expand Down

0 comments on commit 858f463

Please sign in to comment.