From 0eceddf4d87da45ae1c31a9f76b9ba64ad265c45 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
Date: Tue, 23 Mar 1999 17:48:08 +0100
Subject: [PATCH] Caching of input der encoding fixed. New function
 record_der_contents.

Rev: lib/modules/Standards.pmod/ASN1.pmod/Types.pmod:1.8
---
 .../Standards.pmod/ASN1.pmod/Types.pmod       | 21 ++++++++++++-------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/lib/modules/Standards.pmod/ASN1.pmod/Types.pmod b/lib/modules/Standards.pmod/ASN1.pmod/Types.pmod
index 96f0ef3558..466eb5d1ae 100644
--- a/lib/modules/Standards.pmod/ASN1.pmod/Types.pmod
+++ b/lib/modules/Standards.pmod/ASN1.pmod/Types.pmod
@@ -105,6 +105,11 @@ class asn1_object
     {
       return (der = s);
     }
+
+  string record_der_contents(string s)
+    {
+      record_der(build_der(s));
+    }
   
   string get_der()
     {
@@ -142,7 +147,7 @@ class asn1_compound
     {
       WERROR(sprintf("asn1_compound[%s]->begin_decode_constructed\n",
 		     type_name));
-      record_der(raw);
+      record_der_contents(raw);
       return this_object();
     }
 
@@ -190,7 +195,7 @@ class asn1_string
 
   object decode_primitive(string contents)
     {
-      record_der(contents);
+      record_der_contents(contents);
       value = contents;
       return this_object();
     }
@@ -224,7 +229,7 @@ class asn1_boolean
 	WERROR("asn1_boolean->decode_primitive: Bad length.\n");
 	return 0;
       }
-      record_der(contents);
+      record_der_contents(contents);
       value = contents[0];
       return this_object();
     }
@@ -270,7 +275,7 @@ class asn1_integer
   
   object decode_primitive(string contents)
     {
-      record_der(contents);
+      record_der_contents(contents);
       value = Gmp.mpz(contents, 256);
       if (contents[0] & 0x80)  /* Negative */
 	value -= Gmp.pow(256, strlen(contents));
@@ -321,7 +326,7 @@ class asn1_bit_string
   
   object decode_primitive(string contents)
     {
-      record_der(contents);
+      record_der_contents(contents);
       if (!sizeof(contents))
 	return 0;
       unused = contents[0];
@@ -361,7 +366,7 @@ class asn1_utf8_string
 
   object decode_primitive(string contents)
     {
-      record_der(contents);
+      record_der_contents(contents);
       if (catch {
 	value = utf8_to_string(contents);
       })
@@ -382,7 +387,7 @@ class asn1_null
 
   object decode_primitive(string contents)
     {
-      record_der(contents);
+      record_der_contents(contents);
       return !sizeof(contents) && this_object();
     }
 
@@ -421,7 +426,7 @@ class asn1_identifier
 
   object decode_primitive(string contents)
     {
-      record_der(contents);
+      record_der_contents(contents);
 
       if (contents[0] < 120)
 	id = ({ contents[0] / 40, contents[0] % 40 });
-- 
GitLab