rv = SEC_ASN1DecodeItem(arena, responderID, responderIDTemplate,
rv = SEC_QuickDERDecodeItem(arena, responderID, responderIDTemplate,
ocsp_DecodeBasicOCSPResponse(PRArenaPool *arena, SECItem *src){    void *mark;    ocspBasicOCSPResponse *basicResponse;    ocspResponseData *responseData;    ocspResponderID *responderID;    ocspResponderIDType responderIDType;    const SEC_ASN1Template *responderIDTemplate;    int derTag;    SECStatus rv;    mark = PORT_ArenaMark(arena);    basicResponse = PORT_ArenaZAlloc(arena, sizeof(ocspBasicOCSPResponse));    if (basicResponse == NULL) {	goto loser;    }    rv = SEC_ASN1DecodeItem(arena, basicResponse,			    ocsp_BasicOCSPResponseTemplate, src);    if (rv != SECSuccess) {	if (PORT_GetError() == SEC_ERROR_BAD_DER)	    PORT_SetError(SEC_ERROR_OCSP_MALFORMED_RESPONSE);	goto loser;    }    responseData = basicResponse->tbsResponseData;    /*     * The following asserts point out internal errors (problems in     * the template definitions or in the ASN.1 decoder itself, etc.).     */    PORT_Assert(responseData != NULL);    PORT_Assert(responseData->derResponderID.data != NULL);    /*     * XXX Because responderID is a CHOICE, which is not currently handled     * by our ASN.1 decoder, we have to decode it "by hand".     */    derTag = responseData->derResponderID.data[0] & SEC_ASN1_TAGNUM_MASK;    responderIDType = ocsp_ResponderIDTypeByTag(derTag);    responderIDTemplate = ocsp_ResponderIDTemplateByType(responderIDType);    responderID = PORT_ArenaZAlloc(arena, sizeof(ocspResponderID));    if (responderID == NULL) {	goto loser;    }    rv = SEC_ASN1DecodeItem(arena, responderID, responderIDTemplate,			    &responseData->derResponderID);    if (rv != SECSuccess) {	if (PORT_GetError() == SEC_ERROR_BAD_DER)	    PORT_SetError(SEC_ERROR_OCSP_MALFORMED_RESPONSE);	goto loser;    }    responderID->responderIDType = responderIDType;    responseData->responderID = responderID;    /*     * XXX Each SingleResponse also contains a CHOICE, which has to be     * fixed up by hand.     */    rv = ocsp_FinishDecodingSingleResponses(arena, responseData->responses);    if (rv != SECSuccess) {	goto loser;    }    PORT_ArenaUnmark(arena, mark);    return basicResponse;loser:    PORT_ArenaRelease(arena, mark);    return NULL;}