rv = SEC_ASN1DecodeItem(arena, response, ocsp_OCSPResponseTemplate, src);
rv = SEC_QuickDERDecodeItem(arena, response, ocsp_OCSPResponseTemplate, src);
CERT_DecodeOCSPResponse(SECItem *src){    PRArenaPool *arena = NULL;    CERTOCSPResponse *response = NULL;    SECStatus rv = SECFailure;    ocspResponseStatus sv;    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);    if (arena == NULL) {	goto loser;    }    response = (CERTOCSPResponse *) PORT_ArenaZAlloc(arena,						     sizeof(CERTOCSPResponse));    if (response == NULL) {	goto loser;    }    response->arena = arena;    rv = SEC_ASN1DecodeItem(arena, response, ocsp_OCSPResponseTemplate, src);    if (rv != SECSuccess) {	if (PORT_GetError() == SEC_ERROR_BAD_DER)	    PORT_SetError(SEC_ERROR_OCSP_MALFORMED_RESPONSE);	goto loser;    }    sv = (ocspResponseStatus) DER_GetInteger(&response->responseStatus);    response->statusValue = sv;    if (sv != ocspResponse_successful) {	/*	 * If the response status is anything but successful, then we	 * are all done with decoding; the status is all there is.	 */	return response;    }    /*     * A successful response contains much more information, still encoded.     * Now we need to decode that.     */    rv = ocsp_DecodeResponseBytes(arena, response->responseBytes);    if (rv != SECSuccess) {	goto loser;    }    return response;loser:    if (arena != NULL) {	PORT_FreeArena(arena, PR_FALSE);    }    return NULL;}