grpc 1.41.0 → 1.41.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +4 -3
  3. data/etc/roots.pem +335 -326
  4. data/src/ruby/ext/grpc/extconf.rb +1 -1
  5. data/src/ruby/lib/grpc/version.rb +1 -1
  6. data/third_party/boringssl-with-bazel/err_data.c +278 -272
  7. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  8. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  9. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
  10. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
  11. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
  12. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  13. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
  14. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +6 -43
  15. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  16. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
  17. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  18. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  19. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +25 -0
  20. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
  21. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
  22. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
  23. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
  24. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
  25. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
  26. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  27. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  28. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  29. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  30. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  31. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  32. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  33. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  34. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
  35. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
  36. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
  37. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  38. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
  39. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
  40. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +1 -1
  41. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  42. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
  43. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
  44. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
  45. data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
  46. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  47. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  48. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  49. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  50. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  51. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  52. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
  53. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
  54. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  55. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  56. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
  57. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  58. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
  59. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
  60. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  61. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
  62. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
  63. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  64. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
  65. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
  66. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  67. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
  68. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
  69. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
  70. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
  71. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
  72. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  73. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
  74. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
  75. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
  76. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  77. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
  78. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  79. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
  80. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
  81. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  82. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  83. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  84. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
  85. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -0
  86. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
  87. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +304 -192
  88. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
  89. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -3
  90. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  91. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  92. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
  93. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
  94. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  95. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
  96. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  97. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
  98. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
  99. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  100. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +26 -12
  101. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
  102. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +50 -76
  103. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +0 -131
  104. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
  105. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
  106. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
  107. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
  108. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
  109. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
  110. data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
  111. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  112. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
  113. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
  114. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -16
  115. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
  116. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
  117. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
  118. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
  119. metadata +39 -38
@@ -69,53 +69,17 @@ DEFINE_STACK_OF(ASN1_STRING_TABLE)
69
69
  static STACK_OF(ASN1_STRING_TABLE) *stable = NULL;
70
70
  static void st_free(ASN1_STRING_TABLE *tbl);
71
71
 
72
- /*
73
- * This is the global mask for the mbstring functions: this is use to mask
74
- * out certain types (such as BMPString and UTF8String) because certain
75
- * software (e.g. Netscape) has problems with them.
76
- */
77
-
78
- static unsigned long global_mask = B_ASN1_UTF8STRING;
79
-
80
72
  void ASN1_STRING_set_default_mask(unsigned long mask)
81
73
  {
82
- global_mask = mask;
83
74
  }
84
75
 
85
76
  unsigned long ASN1_STRING_get_default_mask(void)
86
77
  {
87
- return global_mask;
78
+ return B_ASN1_UTF8STRING;
88
79
  }
89
80
 
90
- /*
91
- * This function sets the default to various "flavours" of configuration.
92
- * based on an ASCII string. Currently this is: MASK:XXXX : a numerical mask
93
- * value. nobmp : Don't use BMPStrings (just Printable, T61). pkix : PKIX
94
- * recommendation in RFC2459. utf8only : only use UTF8Strings (RFC2459
95
- * recommendation for 2004). default: the default value, Printable, T61, BMP.
96
- */
97
-
98
81
  int ASN1_STRING_set_default_mask_asc(const char *p)
99
82
  {
100
- unsigned long mask;
101
- char *end;
102
- if (!strncmp(p, "MASK:", 5)) {
103
- if (!p[5])
104
- return 0;
105
- mask = strtoul(p + 5, &end, 0);
106
- if (*end)
107
- return 0;
108
- } else if (!strcmp(p, "nombstr"))
109
- mask = ~((unsigned long)(B_ASN1_BMPSTRING | B_ASN1_UTF8STRING));
110
- else if (!strcmp(p, "pkix"))
111
- mask = ~((unsigned long)B_ASN1_T61STRING);
112
- else if (!strcmp(p, "utf8only"))
113
- mask = B_ASN1_UTF8STRING;
114
- else if (!strcmp(p, "default"))
115
- mask = 0xFFFFFFFFL;
116
- else
117
- return 0;
118
- ASN1_STRING_set_default_mask(mask);
119
83
  return 1;
120
84
  }
121
85
 
@@ -139,13 +103,12 @@ ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out,
139
103
  if (tbl) {
140
104
  mask = tbl->mask;
141
105
  if (!(tbl->flags & STABLE_NO_MASK))
142
- mask &= global_mask;
106
+ mask &= B_ASN1_UTF8STRING;
143
107
  ret = ASN1_mbstring_ncopy(out, in, inlen, inform, mask,
144
108
  tbl->minsize, tbl->maxsize);
145
- } else
146
- ret =
147
- ASN1_mbstring_copy(out, in, inlen, inform,
148
- DIRSTRING_TYPE & global_mask);
109
+ } else {
110
+ ret = ASN1_mbstring_copy(out, in, inlen, inform, B_ASN1_UTF8STRING);
111
+ }
149
112
  if (ret <= 0)
150
113
  return NULL;
151
114
  return *out;
@@ -155,7 +118,7 @@ ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out,
155
118
  * Now the tables and helper functions for the string table:
156
119
  */
157
120
 
158
- /* size limits: this stuff is taken straight from RFC3280 */
121
+ /* size limits: this stuff is taken straight from RFC 3280 */
159
122
 
160
123
  #define ub_name 32768
161
124
  #define ub_common_name 64
@@ -200,7 +200,7 @@ static int asn1_time_to_tm(struct tm *tm, const ASN1_TIME *t)
200
200
  return 0;
201
201
  }
202
202
 
203
- int ASN1_TIME_diff(int *pday, int *psec,
203
+ int ASN1_TIME_diff(int *out_days, int *out_seconds,
204
204
  const ASN1_TIME *from, const ASN1_TIME *to)
205
205
  {
206
206
  struct tm tm_from, tm_to;
@@ -208,5 +208,5 @@ int ASN1_TIME_diff(int *pday, int *psec,
208
208
  return 0;
209
209
  if (!asn1_time_to_tm(&tm_to, to))
210
210
  return 0;
211
- return OPENSSL_gmtime_diff(pday, psec, &tm_from, &tm_to);
211
+ return OPENSSL_gmtime_diff(out_days, out_seconds, &tm_from, &tm_to);
212
212
  }
@@ -262,42 +262,3 @@ int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t)
262
262
  return -1;
263
263
  return 0;
264
264
  }
265
-
266
- #if 0
267
- time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s)
268
- {
269
- struct tm tm;
270
- int offset;
271
-
272
- OPENSSL_memset(&tm, '\0', sizeof tm);
273
-
274
- # define g2(p) (((p)[0]-'0')*10+(p)[1]-'0')
275
- tm.tm_year = g2(s->data);
276
- if (tm.tm_year < 50)
277
- tm.tm_year += 100;
278
- tm.tm_mon = g2(s->data + 2) - 1;
279
- tm.tm_mday = g2(s->data + 4);
280
- tm.tm_hour = g2(s->data + 6);
281
- tm.tm_min = g2(s->data + 8);
282
- tm.tm_sec = g2(s->data + 10);
283
- if (s->data[12] == 'Z')
284
- offset = 0;
285
- else {
286
- offset = g2(s->data + 13) * 60 + g2(s->data + 15);
287
- if (s->data[12] == '-')
288
- offset = -offset;
289
- }
290
- # undef g2
291
-
292
- return mktime(&tm) - offset * 60; /* FIXME: mktime assumes the current
293
- * timezone instead of UTC, and unless
294
- * we rewrite OpenSSL in Lisp we cannot
295
- * locally change the timezone without
296
- * possibly interfering with other
297
- * parts of the program. timegm, which
298
- * uses UTC, is non-standard. Also
299
- * time_t is inappropriate for general
300
- * UTC times because it may a 32 bit
301
- * type. */
302
- }
303
- #endif
@@ -72,7 +72,7 @@ const char *ASN1_tag2str(int tag)
72
72
  };
73
73
 
74
74
  if ((tag == V_ASN1_NEG_INTEGER) || (tag == V_ASN1_NEG_ENUMERATED))
75
- tag &= ~0x100;
75
+ tag &= ~V_ASN1_NEG;
76
76
 
77
77
  if (tag < 0 || tag > 30)
78
78
  return "(unknown)";
@@ -123,15 +123,31 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
123
123
  const ASN1_ITEM *it, int tag, int aclass, char opt,
124
124
  ASN1_TLC *ctx);
125
125
 
126
+ /* ASN1_item_ex_i2d encodes |*pval| as a value of type |it| to |out| under the
127
+ * i2d output convention. It returns a non-zero length on success and -1 on
128
+ * error. If |tag| is -1. the tag and class come from |it|. Otherwise, the tag
129
+ * number is |tag| and the class is |aclass|. This is used for implicit tagging.
130
+ * This function treats a missing value as an error, not an optional field. */
126
131
  int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
127
132
  const ASN1_ITEM *it, int tag, int aclass);
133
+
128
134
  void ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
129
135
 
136
+ /* asn1_get_choice_selector returns the CHOICE selector value for |*pval|, which
137
+ * must of type |it|. */
130
138
  int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it);
139
+
131
140
  int asn1_set_choice_selector(ASN1_VALUE **pval, int value, const ASN1_ITEM *it);
132
141
 
142
+ /* asn1_get_field_ptr returns a pointer to the field in |*pval| corresponding to
143
+ * |tt|. */
133
144
  ASN1_VALUE **asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
134
145
 
146
+ /* asn1_do_adb returns the |ASN1_TEMPLATE| for the ANY DEFINED BY field |tt|,
147
+ * based on the selector INTEGER or OID in |*pval|. If |tt| is not an ADB field,
148
+ * it returns |tt|. If the selector does not match any value, it returns NULL.
149
+ * If |nullerr| is non-zero, it will additionally push an error to the error
150
+ * queue when there is no match. */
135
151
  const ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt,
136
152
  int nullerr);
137
153
 
@@ -140,8 +156,13 @@ int asn1_refcount_dec_and_test_zero(ASN1_VALUE **pval, const ASN1_ITEM *it);
140
156
 
141
157
  void asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it);
142
158
  void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
159
+
160
+ /* asn1_enc_restore, if |*pval| has a saved encoding, writes it to |out| under
161
+ * the i2d output convention, sets |*len| to the length, and returns one. If it
162
+ * has no saved encoding, it returns zero. */
143
163
  int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval,
144
164
  const ASN1_ITEM *it);
165
+
145
166
  int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen,
146
167
  const ASN1_ITEM *it);
147
168
 
@@ -150,6 +171,10 @@ int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen,
150
171
  * a pointer. */
151
172
  const void *asn1_type_value_as_pointer(const ASN1_TYPE *a);
152
173
 
174
+ /* asn1_is_printable returns one if |value| is a valid Unicode codepoint for an
175
+ * ASN.1 PrintableString, and zero otherwise. */
176
+ int asn1_is_printable(uint32_t value);
177
+
153
178
 
154
179
  #if defined(__cplusplus)
155
180
  } /* extern C */
@@ -170,8 +170,6 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
170
170
  {
171
171
  const ASN1_TEMPLATE *tt, *errtt = NULL;
172
172
  const ASN1_EXTERN_FUNCS *ef;
173
- const ASN1_AUX *aux = it->funcs;
174
- ASN1_aux_cb *asn1_cb;
175
173
  const unsigned char *p = NULL, *q;
176
174
  unsigned char oclass;
177
175
  char seq_eoc, seq_nolen, cst, isopt;
@@ -183,10 +181,6 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
183
181
  aclass &= ~ASN1_TFLG_COMBINE;
184
182
  if (!pval)
185
183
  return 0;
186
- if (aux && aux->asn1_cb)
187
- asn1_cb = aux->asn1_cb;
188
- else
189
- asn1_cb = 0;
190
184
 
191
185
  /*
192
186
  * Bound |len| to comfortably fit in an int. Lengths in this module often
@@ -264,7 +258,7 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
264
258
  ef = it->funcs;
265
259
  return ef->asn1_ex_d2i(pval, in, len, it, tag, aclass, opt, ctx);
266
260
 
267
- case ASN1_ITYPE_CHOICE:
261
+ case ASN1_ITYPE_CHOICE: {
268
262
  /*
269
263
  * It never makes sense for CHOICE types to have implicit tagging, so if
270
264
  * tag != -1, then this looks like an error in the template.
@@ -274,6 +268,8 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
274
268
  goto err;
275
269
  }
276
270
 
271
+ const ASN1_AUX *aux = it->funcs;
272
+ ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
277
273
  if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL))
278
274
  goto auxerr;
279
275
 
@@ -327,8 +323,9 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
327
323
  goto auxerr;
328
324
  *in = p;
329
325
  return 1;
326
+ }
330
327
 
331
- case ASN1_ITYPE_SEQUENCE:
328
+ case ASN1_ITYPE_SEQUENCE: {
332
329
  p = *in;
333
330
 
334
331
  /* If no IMPLICIT tagging set to SEQUENCE, UNIVERSAL */
@@ -356,6 +353,8 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
356
353
  goto err;
357
354
  }
358
355
 
356
+ const ASN1_AUX *aux = it->funcs;
357
+ ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
359
358
  if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL))
360
359
  goto auxerr;
361
360
 
@@ -462,6 +461,7 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
462
461
  goto auxerr;
463
462
  *in = p;
464
463
  return 1;
464
+ }
465
465
 
466
466
  default:
467
467
  return 0;