From 05273b166dc9f1a12b45e91ce7727a5ce95e4d0d Mon Sep 17 00:00:00 2001
From: mtu <maxence.tury@ssi.gouv.fr>
Date: Mon, 8 Feb 2016 18:56:10 +0100
Subject: [PATCH] Restore ASN1F_element subclass instead of ASN1F_field to
 prevent recursion exceptions

---
 scapy/asn1fields.py  | 4 +++-
 scapy/layers/x509.py | 7 ++-----
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/scapy/asn1fields.py b/scapy/asn1fields.py
index 8cc602b3..0b84c6a9 100644
--- a/scapy/asn1fields.py
+++ b/scapy/asn1fields.py
@@ -367,7 +367,7 @@ class ASN1F_TIME_TICKS(ASN1F_INTEGER):
 #### Complex ASN1 Fields ####
 #############################
 
-class ASN1F_optional(ASN1F_field):
+class ASN1F_optional(ASN1F_element):
     def __init__(self, field, by_default=False):
         field.flexible_tag = False
         self._field = field
@@ -375,6 +375,8 @@ class ASN1F_optional(ASN1F_field):
         self.name = field.name
         self.islist = field.islist
         self.holds_packets = field.holds_packets
+    def __getattr__(self, attr):
+        return getattr(self._field, attr)
     def m2i(self, pkt, s):
         try:
             return self._field.m2i(pkt, s)
diff --git a/scapy/layers/x509.py b/scapy/layers/x509.py
index 4bd14080..027e1d7f 100644
--- a/scapy/layers/x509.py
+++ b/scapy/layers/x509.py
@@ -167,7 +167,7 @@ class X509_RDN(ASN1_Packet):
 class X509_OtherName(ASN1_Packet):
     ASN1_codec = ASN1_Codecs.BER
     ASN1_root = ASN1F_SEQUENCE(
-                    ASN1F_OID("type-id", "0"),
+                    ASN1F_OID("type_id", "0"),
                     ASN1F_CHOICE("value", None,
                         ASN1F_IA5_STRING, ASN1F_ISO646_STRING,
                         ASN1F_BMP_STRING, ASN1F_UTF8_STRING,
@@ -225,11 +225,8 @@ class X509_RegisteredID(ASN1_Packet):
     ASN1_root = ASN1F_OID("registeredID", "")
 
 class X509_GeneralName(ASN1_Packet):
-    dirName = X509_DirectoryName()
-    dirName.overload_fields[hash(X509_DirectoryName)] = {"exp": 0xa4,
-                                                         "imp": None}
     ASN1_codec = ASN1_Codecs.BER
-    ASN1_root = ASN1F_CHOICE("generalName", dirName,
+    ASN1_root = ASN1F_CHOICE("generalName", X509_DirectoryName(),
                     ASN1F_PACKET("otherName", None, X509_OtherName,
                                  implicit_tag=0xa0),
                     ASN1F_PACKET("rfc822Name", None, X509_RFC822Name,
-- 
GitLab