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