if (!XPT_ANN_IS_LAST(ann->flags) && !DoAnnotation(cursor, &ann->next)) goto error_2;
DoAnnotation(XPTCursor *cursor, XPTAnnotation **annp){    XPTMode mode = cursor->state->mode;    XPTAnnotation *ann;        if (mode == XPT_DECODE) {        ann = XPT_NEWZAP(XPTAnnotation);        if (!ann)            return PR_FALSE;        *annp = ann;    } else {        ann = *annp;    }        if (!XPT_Do8(cursor, &ann->flags))        goto error;    if (XPT_ANN_IS_PRIVATE(ann->flags)) {        if (!XPT_DoStringInline(cursor, &ann->creator) ||            !XPT_DoStringInline(cursor, &ann->private_data))            goto error_2;    }        /*     * If a subsequent Annotation fails, what to do?     * - free all annotations, return PR_FALSE? (current behaviour)     * - free failed annotation only, return PR_FALSE (caller can check for     *   non-NULL *annp on PR_FALSE return to detect partial annotation     *   decoding)?     */    if (!XPT_ANN_IS_LAST(ann->flags) &&        !DoAnnotation(cursor, &ann->next))        goto error_2;    return PR_TRUE; error_2:    if (ann && XPT_ANN_IS_PRIVATE(ann->flags)) {        XPT_FREEIF(ann->creator);        XPT_FREEIF(ann->private_data);    }    XPT_ERROR_HANDLE(ann);}