VERSION | 2 +- doc/news.rst | 7 +++++++ pyderasn.py | 10 ++++++++-- tests/test_pyderasn.py | 3 +++ diff --git a/VERSION b/VERSION index 2c858ab6c54dddd5d5d3f908545751c6fc591a0d5740edad717a56e61e03b2b7..24b3f98e572ed79b336550ac9fc62a86d9a902822eacf155ba85853af320aa89 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.0 +2.1 diff --git a/doc/news.rst b/doc/news.rst index 8fc3928f53029d33f9bae37589c2cd7ab6035b54c45213ff99aa14fdf14f168b..5d74df9c91cb3f042bb4f6e6930fdc9505d552214f30ce1c4e0d4fdb0779f548 100644 --- a/doc/news.rst +++ b/doc/news.rst @@ -1,6 +1,13 @@ News ==== +.. _release2.1: + +2.1 +--- +* Fixed invalid offset calculation when dealing with DEFINED BY objects + having explicit tags + .. _release2.0: 2.0 diff --git a/pyderasn.py b/pyderasn.py index 0b05723e0089e56bea0ea3abdad0153aaf6822d426a6493c20a2311ad5b5ac60..b0b38d530c9995618de7a29dcc54aed7359330c0bb7ba57ccf09ece0d9d16c3f 100755 --- a/pyderasn.py +++ b/pyderasn.py @@ -3875,7 +3875,10 @@ decode_path_defby(defined_by), ) defined_value, defined_tail = defined_spec.decode( memoryview(bytes(_value)), - sub_offset + value.tlen + value.llen, + sub_offset + ( + (value.tlen + value.llen + value.expl_tlen + value.expl_llen) + if value.expled else (value.tlen + value.llen) + ), leavemm=True, decode_path=sub_sub_decode_path, ctx=ctx, @@ -3891,7 +3894,10 @@ _value.defined = (defined_by, defined_value) else: defined_value, defined_tail = defined_spec.decode( memoryview(bytes(value)), - sub_offset + value.tlen + value.llen, + sub_offset + ( + (value.tlen + value.llen + value.expl_tlen + value.expl_llen) + if value.expled else (value.tlen + value.llen) + ), leavemm=True, decode_path=sub_decode_path + (decode_path_defby(defined_by),), ctx=ctx, diff --git a/tests/test_pyderasn.py b/tests/test_pyderasn.py index 557db850df139c91eb5e78af63975a511e7b10ddbcb7b29662e7da49780b3e40..69c8a3925da522f061caa970e02976fa28bcc04788e9e51454aa6505262d45e9 100644 --- a/tests/test_pyderasn.py +++ b/tests/test_pyderasn.py @@ -5003,6 +5003,9 @@ ) self.assertIsNotNone(seq_integered["value"].defined) self.assertEqual(seq_integered["value"].defined[0], type_integered) self.assertEqual(seq_integered["value"].defined[1], Integer(123)) + self.assertTrue(seq_integered_raw[ + seq_integered["value"].defined[1].offset: + ].startswith(Integer(123).encode())) seq_sequenced, _ = Seq().decode( seq_sequenced_raw,