if (byte == 0 && state->parent != NULL && state->parent->indefinite) {
if (byte == 0 && state->parent != NULL && (state->parent->indefinite || ( (state->parent->place == afterImplicit || state->parent->place == afterPointer) && state->parent->parent != NULL && state->parent->parent->indefinite ) ) ) {
sec_asn1d_parse_identifier (sec_asn1d_state *state,			    const char *buf, unsigned long len){    unsigned char byte;    unsigned char tag_number;    PORT_Assert (state->place == beforeIdentifier);    if (len == 0) {	state->top->status = needBytes;	return 0;    }    byte = (unsigned char) *buf;    tag_number = byte & SEC_ASN1_TAGNUM_MASK;    if (IS_HIGH_TAG_NUMBER (tag_number)) {	state->place = duringIdentifier;	state->found_tag_number = 0;	/*	 * Actually, we have no idea how many bytes are pending, but we	 * do know that it is at least 1.  That is all we know; we have	 * to look at each byte to know if there is another, etc.	 */	state->pending = 1;    } else {	if (byte == 0 && state->parent != NULL		      && state->parent->indefinite) {	    /*	     * Our parent has indefinite-length encoding, and the	     * entire tag found is 0, so it seems that we have hit the	     * end-of-contents octets.  To handle this, we just change	     * our state to that which expects to get the bytes of the	     * end-of-contents octets and let that code re-read this byte	     * so that our categorization of field types is correct.	     * After that, our parent will then deal with everything else.	     */	    state->place = duringEndOfContents;	    state->pending = 2;	    state->found_tag_number = 0;	    state->found_tag_modifiers = 0;	    /*	     * We might be an optional field that is, as we now find out,	     * missing.  Give our parent a clue that this happened.	     */	    if (state->optional)		state->missing = PR_TRUE;	    return 0;	}	state->place = afterIdentifier;	state->found_tag_number = tag_number;    }    state->found_tag_modifiers = byte & ~SEC_ASN1_TAGNUM_MASK;    return 1;}