summaryrefslogtreecommitdiffstats
path: root/crypto/gnutls/x509.patch
blob: 46127b493501de22e0d67c60d2b2e84f1d2b506e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# From https://aur.archlinux.org/packages/gnutls2/
diff -Naur gnutls-2.12.20.orig/lib/x509/x509.c gnutls-2.12.20/lib/x509/x509.c
--- gnutls-2.12.20.orig/lib/x509/x509.c	2013-01-04 17:20:52.841585812 -0800
+++ gnutls-2.12.20/lib/x509/x509.c	2013-01-04 17:29:30.655702758 -0800
@@ -2060,10 +2060,12 @@
                             int irdn, int iava, gnutls_x509_ava_st * ava)
 {
   ASN1_TYPE rdn, elem;
+  ASN1_DATA_NODE vnode;
   long len;
   int lenlen, remlen, ret;
   char rbuf[ASN1_MAX_NAME_SIZE];
-  unsigned char cls, *ptr;
+  unsigned char cls;
+  const unsigned char *ptr;
 
   iava++;
   irdn++;                       /* 0->1, 1->2 etc */
@@ -2084,8 +2086,15 @@
       return GNUTLS_E_ASN1_ELEMENT_NOT_FOUND;
     }
 
-  ava->oid.data = elem->value;
-  ava->oid.size = elem->value_len;
+  ret = asn1_read_node_value(elem, &vnode);
+  if (ret != ASN1_SUCCESS)
+  {
+		  gnutls_assert ();
+		  return GNUTLS_E_ASN1_ELEMENT_NOT_FOUND;
+  }
+
+  ava->oid.data = (void*)vnode.value;
+  ava->oid.size = vnode.value_len;
 
   snprintf (rbuf, sizeof (rbuf), "?%d.value", iava);
   elem = asn1_find_node (rdn, rbuf);
@@ -2095,12 +2104,18 @@
       return GNUTLS_E_ASN1_ELEMENT_NOT_FOUND;
     }
 
+  ret = asn1_read_node_value(elem, &vnode);
+  if (ret != ASN1_SUCCESS)
+  {
+		  gnutls_assert ();
+		  return GNUTLS_E_ASN1_ELEMENT_NOT_FOUND;
+  }
   /* The value still has the previous tag's length bytes, plus the
    * current value's tag and length bytes. Decode them.
    */
 
-  ptr = elem->value;
-  remlen = elem->value_len;
+  ptr = vnode.value;
+  remlen = vnode.value_len;
   len = asn1_get_length_der (ptr, remlen, &lenlen);
   if (len < 0)
     {
@@ -2131,7 +2146,7 @@
       }
     ava->value.size = tmp;
   }
-  ava->value.data = ptr + lenlen;
+  ava->value.data = (void*)(ptr + lenlen);
 
   return 0;
 }