rv = SEC_ASN1DecodeItem(arena, &userNotice->noticeReference,
rv = SEC_QuickDERDecodeItem(arena, &userNotice->noticeReference,
CERT_DecodeUserNotice(SECItem *noticeItem){    PRArenaPool *arena = NULL;    SECStatus rv;    CERTUserNotice *userNotice;        /* make a new arena */    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);        if ( !arena ) {	goto loser;    }    /* allocate the userNotice structure */    userNotice = (CERTUserNotice *)PORT_ArenaZAlloc(arena,						    sizeof(CERTUserNotice));        if ( userNotice == NULL ) {	goto loser;    }        userNotice->arena = arena;    /* decode the user notice */    rv = SEC_ASN1DecodeItem(arena, userNotice, CERT_UserNoticeTemplate, 			    noticeItem);    if ( rv != SECSuccess ) {	goto loser;    }    if (userNotice->derNoticeReference.data != NULL) {	/* sigh, the asn1 parser stripped the sequence encoding, re add it	 * before we decode.	 */	SECItem tmpbuf;	int	newBytes;	newBytes = SEC_ASN1LengthLength(userNotice->derNoticeReference.len)+1;	tmpbuf.len = newBytes + userNotice->derNoticeReference.len;	tmpbuf.data = PORT_ZAlloc(tmpbuf.len);	if (tmpbuf.data == NULL) {	    goto loser;	}	tmpbuf.data[0] = SEC_ASN1_SEQUENCE | SEC_ASN1_CONSTRUCTED;	SEC_ASN1EncodeLength(&tmpbuf.data[1],userNotice->derNoticeReference.len);	PORT_Memcpy(&tmpbuf.data[newBytes],userNotice->derNoticeReference.data,				userNotice->derNoticeReference.len);	/* OK, no decode it */    	rv = SEC_ASN1DecodeItem(arena, &userNotice->noticeReference, 	    CERT_NoticeReferenceTemplate, &tmpbuf);	PORT_Free(tmpbuf.data); tmpbuf.data = NULL;    	if ( rv != SECSuccess ) {	    goto loser;    	}    }    return(userNotice);    loser:    if ( arena != NULL ) {	PORT_FreeArena(arena, PR_FALSE);    }        return(NULL);}