rsk = p7->d.signed_and_enveloped->recipientinfo;
if (rsk == NULL)
return NULL;
- if (sk_PKCS7_RECIP_INFO_num(rsk) <= idx)
+ if (idx < 0 || sk_PKCS7_RECIP_INFO_num(rsk) <= idx)
return NULL;
ri = sk_PKCS7_RECIP_INFO_value(rsk, idx);
return ri->issuer_and_serial;
#include "internal/nelem.h"
#include "testutil.h"
+static int pkcs7_issuer_and_serial_negative_idx_test(void)
+{
+ PKCS7 *p7 = NULL;
+ PKCS7_RECIP_INFO *ri = NULL;
+ int ret = 0;
+
+ if (!TEST_ptr(p7 = PKCS7_new())
+ || !TEST_true(PKCS7_set_type(p7, NID_pkcs7_signedAndEnveloped))
+ || !TEST_ptr(ri = PKCS7_RECIP_INFO_new())
+ || !TEST_true(PKCS7_add_recipient_info(p7, ri)))
+ goto end;
+ ri = NULL;
+
+ if (!TEST_ptr(PKCS7_get_issuer_and_serial(p7, 0))
+ || !TEST_ptr_null(PKCS7_get_issuer_and_serial(p7, -1)))
+ goto end;
+
+ ret = 1;
+end:
+ PKCS7_RECIP_INFO_free(ri);
+ PKCS7_free(p7);
+ return ret;
+}
+
#ifndef OPENSSL_NO_EC
static const unsigned char cert_der[] = {
0x30, 0x82, 0x01, 0x51, 0x30, 0x81, 0xf7, 0xa0, 0x03, 0x02, 0x01, 0x02,
int setup_tests(void)
{
+ ADD_TEST(pkcs7_issuer_and_serial_negative_idx_test);
#ifndef OPENSSL_NO_EC
ADD_TEST(pkcs7_verify_test);
ADD_TEST(pkcs7_inner_content_verify_test);