diff --git a/lib/modules/Standards.pmod/ASN1.pmod/Decode.pmod b/lib/modules/Standards.pmod/ASN1.pmod/Decode.pmod
index 7d0e8841d33a01619e0adea12a0c7b2654218757..520ef2e7085c50b5cb3bac66268f309adc525ee5 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 7ddd35edc83200d898998fc78ae88914e3685e1b..76e6a100f2795a313f46ea4f6768ee7cf1d64a42 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(),