@@ -1293,6 +1293,38 @@ TEST(OCSPResponseSignTestExtended, OCSPResponseSign) {
12931293 pkey.get (), EVP_sha256 (), additional_cert.get (),
12941294 OCSP_NOCERTS));
12951295 EXPECT_EQ ((int )sk_X509_num (basic_response.get ()->certs ), 0 );
1296+
1297+ // Regression: re-signing the same |OCSP_BASICRESP| through any sequence of
1298+ // |OCSP_RESPID_KEY| flag combinations must not leak or free the prior
1299+ // responderId union arm through the wrong destructor. ASAN should flag any
1300+ // misuse.
1301+ basic_response.reset (OCSP_BASICRESP_new ());
1302+ ASSERT_TRUE (basic_response);
1303+ EXPECT_TRUE (OCSP_basic_sign (basic_response.get (), signer_cert.get (),
1304+ pkey.get (), EVP_sha256 (), additional_cert.get (),
1305+ 0 ));
1306+ EXPECT_EQ (basic_response.get ()->tbsResponseData ->responderId ->type ,
1307+ V_OCSP_RESPID_NAME);
1308+ EXPECT_TRUE (OCSP_basic_sign (basic_response.get (), signer_cert.get (),
1309+ pkey.get (), EVP_sha256 (), additional_cert.get (),
1310+ OCSP_RESPID_KEY));
1311+ EXPECT_EQ (basic_response.get ()->tbsResponseData ->responderId ->type ,
1312+ V_OCSP_RESPID_KEY);
1313+ EXPECT_TRUE (OCSP_basic_sign (basic_response.get (), signer_cert.get (),
1314+ pkey.get (), EVP_sha256 (), additional_cert.get (),
1315+ OCSP_RESPID_KEY));
1316+ EXPECT_EQ (basic_response.get ()->tbsResponseData ->responderId ->type ,
1317+ V_OCSP_RESPID_KEY);
1318+ EXPECT_TRUE (OCSP_basic_sign (basic_response.get (), signer_cert.get (),
1319+ pkey.get (), EVP_sha256 (), additional_cert.get (),
1320+ 0 ));
1321+ EXPECT_EQ (basic_response.get ()->tbsResponseData ->responderId ->type ,
1322+ V_OCSP_RESPID_NAME);
1323+ EXPECT_TRUE (OCSP_basic_sign (basic_response.get (), signer_cert.get (),
1324+ pkey.get (), EVP_sha256 (), additional_cert.get (),
1325+ 0 ));
1326+ EXPECT_EQ (basic_response.get ()->tbsResponseData ->responderId ->type ,
1327+ V_OCSP_RESPID_NAME);
12961328}
12971329
12981330static const char extended_good_http_request_hdr[] =
0 commit comments