From 09203fe7796d39ad14a0dd4e2bbf136129047ca6 Mon Sep 17 00:00:00 2001 From: Martin Nilsson <nilsson@opera.com> Date: Tue, 17 Mar 2015 14:33:15 +0100 Subject: [PATCH] Prevent infinite loops when decoding incomplete data. --- lib/modules/Standards.pmod/ASN1.pmod/Decode.pmod | 2 +- lib/modules/Standards.pmod/ASN1.pmod/testsuite.in | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/modules/Standards.pmod/ASN1.pmod/Decode.pmod b/lib/modules/Standards.pmod/ASN1.pmod/Decode.pmod index 7d0e8841d3..520ef2e708 100644 --- a/lib/modules/Standards.pmod/ASN1.pmod/Decode.pmod +++ b/lib/modules/Standards.pmod/ASN1.pmod/Decode.pmod @@ -218,7 +218,7 @@ mapping(int:program(.Types.Object)) universal_types = mapping(int:program(.Types.Object))|void types) { types = types ? universal_types+types : universal_types; - return der_decode(Stdio.Buffer(data), types); + return der_decode(Stdio.Buffer(data)->set_error_mode(1), types); } //! Works just like @[simple_der_decode], except it will return diff --git a/lib/modules/Standards.pmod/ASN1.pmod/testsuite.in b/lib/modules/Standards.pmod/ASN1.pmod/testsuite.in index 7ddd35edc8..76e6a100f2 100644 --- a/lib/modules/Standards.pmod/ASN1.pmod/testsuite.in +++ b/lib/modules/Standards.pmod/ASN1.pmod/testsuite.in @@ -2,6 +2,8 @@ START_MARKER test_do( add_constant("Types", Standards.ASN1.Types); ) +test_eval_error(Standards.ASN1.Decode.simple_der_decode("")) + define(test_decode,[[ test_eq(sprintf("%O",Standards.ASN1.Decode.simple_der_decode(String.hex2string($1-" ")))-"Standards.ASN1.",$2) test_eq(Standards.ASN1.Decode.simple_der_decode(String.hex2string($1-" "))->get_der(), -- GitLab