return 0;
}
- if (resplen > 0) {
- respder = OPENSSL_malloc(resplen);
+ if (resplen == 0) {
+ SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_PACKET);
+ return 0;
+ }
- if (respder == NULL) {
- SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB);
- return 0;
- }
+ if ((respder = OPENSSL_malloc(resplen)) == NULL) {
+ SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_CRYPTO_LIB);
+ return 0;
+ }
- if (!PACKET_copy_bytes(pkt, respder, resplen)) {
- SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
- OPENSSL_free(respder);
- return 0;
- }
- p = respder;
- resp = d2i_OCSP_RESPONSE(NULL, &p, (long)resplen);
+ if (!PACKET_copy_bytes(pkt, respder, resplen)) {
+ SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
OPENSSL_free(respder);
- if (resp == NULL) {
- SSLfatal(s, TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE,
- SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE);
- return 0;
- }
- sk_OCSP_RESPONSE_insert(s->ext.ocsp.resp_ex, resp, (int)chainidx);
+ return 0;
+ }
+ p = respder;
+ resp = d2i_OCSP_RESPONSE(NULL, &p, (long)resplen);
+ OPENSSL_free(respder);
+ if (resp == NULL) {
+ SSLfatal(s, TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE,
+ SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE);
+ return 0;
}
+ sk_OCSP_RESPONSE_insert(s->ext.ocsp.resp_ex, resp, (int)chainidx);
}
#endif