static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t flags, ID3v2ExtraMeta **extra_meta)

{

    int isv34, tlen, unsync;

    char tag[5];

    int64_t next, end = avio_tell(s->pb) + len;

    int taghdrlen;

    const char *reason = NULL;

    AVIOContext pb;

    AVIOContext *pbx;

    unsigned char *buffer = NULL;

    int buffer_size = 0;

    void (*extra_func)(AVFormatContext*, AVIOContext*, int, char*, ID3v2ExtraMeta**) = NULL;



    switch (version) {

    case 2:

        if (flags & 0x40) {

            reason = "compression";

            goto error;

        }

        isv34 = 0;

        taghdrlen = 6;

        break;



    case 3:

    case 4:

        isv34 = 1;

        taghdrlen = 10;

        break;



    default:

        reason = "version";

        goto error;

    }



    unsync = flags & 0x80;



    if (isv34 && flags & 0x40) /* Extended header present, just skip over it */

        avio_skip(s->pb, get_size(s->pb, 4));



    while (len >= taghdrlen) {

        unsigned int tflags = 0;

        int tunsync = 0;



        if (isv34) {

            avio_read(s->pb, tag, 4);

            tag[4] = 0;

            if(version==3){

                tlen = avio_rb32(s->pb);

            }else

                tlen = get_size(s->pb, 4);

            tflags = avio_rb16(s->pb);

            tunsync = tflags & ID3v2_FLAG_UNSYNCH;

        } else {

            avio_read(s->pb, tag, 3);

            tag[3] = 0;

            tlen = avio_rb24(s->pb);

        }

        if (tlen <= 0 || tlen > len - taghdrlen) {

            av_log(s, AV_LOG_WARNING, "Invalid size in frame %s, skipping the rest of tag.\n", tag);

            break;

        }

        len -= taghdrlen + tlen;

        next = avio_tell(s->pb) + tlen;



        if (tflags & ID3v2_FLAG_DATALEN) {

            avio_rb32(s->pb);

            tlen -= 4;

        }



        if (tflags & (ID3v2_FLAG_ENCRYPTION | ID3v2_FLAG_COMPRESSION)) {

            av_log(s, AV_LOG_WARNING, "Skipping encrypted/compressed ID3v2 frame %s.\n", tag);

            avio_skip(s->pb, tlen);

        /* check for text tag or supported special meta tag */

        } else if (tag[0] == 'T' || (extra_meta && (extra_func = get_extra_meta_func(tag, isv34)->read))) {

            if (unsync || tunsync) {

                int i, j;

                av_fast_malloc(&buffer, &buffer_size, tlen);

                if (!buffer) {

                    av_log(s, AV_LOG_ERROR, "Failed to alloc %d bytes\n", tlen);

                    goto seek;

                }

                for (i = 0, j = 0; i < tlen; i++, j++) {

                    buffer[j] = avio_r8(s->pb);

                    if (j > 0 && !buffer[j] && buffer[j - 1] == 0xff) {

                        /* Unsynchronised byte, skip it */

                        j--;

                    }

                }

                ffio_init_context(&pb, buffer, j, 0, NULL, NULL, NULL, NULL);

                tlen = j;

                pbx = &pb; // read from sync buffer

            } else {

                pbx = s->pb; // read straight from input

            }

            if (tag[0] == 'T')

                /* parse text tag */

                read_ttag(s, pbx, tlen, tag);

            else

                /* parse special meta tag */

                extra_func(s, pbx, tlen, tag, extra_meta);

        }

        else if (!tag[0]) {

            if (tag[1])

                av_log(s, AV_LOG_WARNING, "invalid frame id, assuming padding");

            avio_skip(s->pb, tlen);

            break;

        }

        /* Skip to end of tag */

seek:

        avio_seek(s->pb, next, SEEK_SET);

    }



    if (version == 4 && flags & 0x10) /* Footer preset, always 10 bytes, skip over it */

        end += 10;



  error:

    if (reason)

        av_log(s, AV_LOG_INFO, "ID3v2.%d tag skipped, cannot handle %s\n", version, reason);

    avio_seek(s->pb, end, SEEK_SET);

    av_free(buffer);

    return;

}

static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t flags, ID3v2ExtraMeta **extra_meta)

{

    int isv34, tlen, unsync;

    char tag[5];

    int64_t next, end = avio_tell(s->pb) + len;

    int taghdrlen;

    const char *reason = NULL;

    AVIOContext pb;

    AVIOContext *pbx;

    unsigned char *buffer = NULL;

    int buffer_size = 0;

    void (*extra_func)(AVFormatContext*, AVIOContext*, int, char*, ID3v2ExtraMeta**) = NULL;



    switch (version) {

    case 2:

        if (flags & 0x40) {

            reason = "compression";

            goto error;

        }

        isv34 = 0;

        taghdrlen = 6;

        break;



    case 3:

    case 4:

        isv34 = 1;

        taghdrlen = 10;

        break;



    default:

        reason = "version";

        goto error;

    }



    unsync = flags & 0x80;



    if (isv34 && flags & 0x40) 

        avio_skip(s->pb, get_size(s->pb, 4));



    while (len >= taghdrlen) {

        unsigned int tflags = 0;

        int tunsync = 0;



        if (isv34) {

            avio_read(s->pb, tag, 4);

            tag[4] = 0;

            if(version==3){

                tlen = avio_rb32(s->pb);

            }else

                tlen = get_size(s->pb, 4);

            tflags = avio_rb16(s->pb);

            tunsync = tflags & ID3v2_FLAG_UNSYNCH;

        } else {

            avio_read(s->pb, tag, 3);

            tag[3] = 0;

            tlen = avio_rb24(s->pb);

        }

        if (tlen <= 0 || tlen > len - taghdrlen) {

            av_log(s, AV_LOG_WARNING, "Invalid size in frame %s, skipping the rest of tag.\n", tag);

            break;

        }

        len -= taghdrlen + tlen;

        next = avio_tell(s->pb) + tlen;



        if (tflags & ID3v2_FLAG_DATALEN) {

            avio_rb32(s->pb);

            tlen -= 4;

        }



        if (tflags & (ID3v2_FLAG_ENCRYPTION | ID3v2_FLAG_COMPRESSION)) {

            av_log(s, AV_LOG_WARNING, "Skipping encrypted/compressed ID3v2 frame %s.\n", tag);

            avio_skip(s->pb, tlen);

        

        } else if (tag[0] == 'T' || (extra_meta && (extra_func = get_extra_meta_func(tag, isv34)->read))) {

            if (unsync || tunsync) {

                int i, j;

                av_fast_malloc(&buffer, &buffer_size, tlen);

                if (!buffer) {

                    av_log(s, AV_LOG_ERROR, "Failed to alloc %d bytes\n", tlen);

                    goto seek;

                }

                for (i = 0, j = 0; i < tlen; i++, j++) {

                    buffer[j] = avio_r8(s->pb);

                    if (j > 0 && !buffer[j] && buffer[j - 1] == 0xff) {

                        

                        j--;

                    }

                }

                ffio_init_context(&pb, buffer, j, 0, NULL, NULL, NULL, NULL);

                tlen = j;

                pbx = &pb; 

            } else {

                pbx = s->pb; 

            }

            if (tag[0] == 'T')

                

                read_ttag(s, pbx, tlen, tag);

            else

                

                extra_func(s, pbx, tlen, tag, extra_meta);

        }

        else if (!tag[0]) {

            if (tag[1])

                av_log(s, AV_LOG_WARNING, "invalid frame id, assuming padding");

            avio_skip(s->pb, tlen);

            break;

        }

        

seek:

        avio_seek(s->pb, next, SEEK_SET);

    }



    if (version == 4 && flags & 0x10) 

        end += 10;



  error:

    if (reason)

        av_log(s, AV_LOG_INFO, "ID3v2.%d tag skipped, cannot handle %s\n", version, reason);

    avio_seek(s->pb, end, SEEK_SET);

    av_free(buffer);

    return;

}

VAR_15staticVAR_15 VAR_15voidVAR_15 VAR_15ff_id3v2_parseVAR_15(VAR_15AVFormatContextVAR_15 *VAR_15VAR_0VAR_15, VAR_15intVAR_15 VAR_15VAR_1VAR_15, VAR_15uint8_tVAR_15 VAR_15VAR_2VAR_15, VAR_15uint8_tVAR_15 VAR_15VAR_3VAR_15, VAR_15ID3v2ExtraMetaVAR_15 **VAR_15VAR_4VAR_15)

{

    VAR_15intVAR_15 VAR_15VAR_5VAR_15, VAR_15VAR_6VAR_15, VAR_15VAR_7VAR_15;

    VAR_15charVAR_15 VAR_15VAR_8VAR_15[VAR_155VAR_15];

    VAR_15int64_tVAR_15 VAR_15nextVAR_15, VAR_15endVAR_15 = VAR_15avio_tellVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15) + VAR_15VAR_1VAR_15;

    VAR_15intVAR_15 VAR_15VAR_9VAR_15;

    VAR_15constVAR_15 VAR_15charVAR_15 *VAR_15VAR_10VAR_15 = VAR_15NULLVAR_15;

    VAR_15AVIOContextVAR_15 VAR_15pbVAR_15;

    VAR_15AVIOContextVAR_15 *VAR_15pbxVAR_15;

    VAR_15unsignedVAR_15 VAR_15charVAR_15 *VAR_15VAR_11VAR_15 = VAR_15NULLVAR_15;

    VAR_15intVAR_15 VAR_15VAR_12VAR_15 = VAR_150VAR_15;

    VAR_15voidVAR_15 (*VAR_15VAR_13VAR_15)(VAR_15AVFormatContextVAR_15*, VAR_15AVIOContextVAR_15*, VAR_15intVAR_15, VAR_15charVAR_15*, VAR_15ID3v2ExtraMetaVAR_15**) = VAR_15NULLVAR_15;



    VAR_15switchVAR_15 (VAR_15VAR_2VAR_15) {

    VAR_15caseVAR_15 VAR_152VAR_15:

        VAR_15ifVAR_15 (VAR_15VAR_3VAR_15 & VAR_150x40VAR_15) {

            VAR_15VAR_10VAR_15 = "VAR_15compressionVAR_15";

            VAR_15gotoVAR_15 VAR_15errorVAR_15;

        }

        VAR_15VAR_5VAR_15 = VAR_150VAR_15;

        VAR_15VAR_9VAR_15 = VAR_156VAR_15;

        VAR_15breakVAR_15;



    VAR_15caseVAR_15 VAR_153VAR_15:

    VAR_15caseVAR_15 VAR_154VAR_15:

        VAR_15VAR_5VAR_15 = VAR_151VAR_15;

        VAR_15VAR_9VAR_15 = VAR_1510VAR_15;

        VAR_15breakVAR_15;



    VAR_15defaultVAR_15:

        VAR_15VAR_10VAR_15 = "VAR_15VAR_2VAR_15";

        VAR_15gotoVAR_15 VAR_15errorVAR_15;

    }



    VAR_15VAR_7VAR_15 = VAR_15VAR_3VAR_15 & VAR_150x80VAR_15;



    VAR_15ifVAR_15 (VAR_15VAR_5VAR_15 && VAR_15VAR_3VAR_15 & VAR_150x40VAR_15) 

        VAR_15avio_skipVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15get_sizeVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_154VAR_15));



    VAR_15whileVAR_15 (VAR_15VAR_1VAR_15 >= VAR_15VAR_9VAR_15) {

        VAR_15unsignedVAR_15 VAR_15intVAR_15 VAR_15tflagsVAR_15 = VAR_150VAR_15;

        VAR_15intVAR_15 VAR_15tunsyncVAR_15 = VAR_150VAR_15;



        VAR_15ifVAR_15 (VAR_15VAR_5VAR_15) {

            VAR_15avio_readVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15VAR_8VAR_15, VAR_154VAR_15);

            VAR_15VAR_8VAR_15[VAR_154VAR_15] = VAR_150VAR_15;

            VAR_15ifVAR_15(VAR_15VAR_2VAR_15==VAR_153VAR_15){

                VAR_15VAR_6VAR_15 = VAR_15avio_rb32VAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15);

            }VAR_15elseVAR_15

                VAR_15VAR_6VAR_15 = VAR_15get_sizeVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_154VAR_15);

            VAR_15tflagsVAR_15 = VAR_15avio_rb16VAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15);

            VAR_15tunsyncVAR_15 = VAR_15tflagsVAR_15 & VAR_15ID3v2_FLAG_UNSYNCHVAR_15;

        } VAR_15elseVAR_15 {

            VAR_15avio_readVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15VAR_8VAR_15, VAR_153VAR_15);

            VAR_15VAR_8VAR_15[VAR_153VAR_15] = VAR_150VAR_15;

            VAR_15VAR_6VAR_15 = VAR_15avio_rb24VAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15);

        }

        VAR_15ifVAR_15 (VAR_15VAR_6VAR_15 <= VAR_150VAR_15 || VAR_15VAR_6VAR_15 > VAR_15VAR_1VAR_15 - VAR_15VAR_9VAR_15) {

            VAR_15av_logVAR_15(VAR_15VAR_0VAR_15, VAR_15AV_LOG_WARNINGVAR_15, "VAR_15InvalidVAR_15 VAR_15sizeVAR_15 VAR_15inVAR_15 VAR_15frameVAR_15 %VAR_15VAR_0VAR_15, VAR_15skippingVAR_15 VAR_15theVAR_15 VAR_15restVAR_15 VAR_15ofVAR_15 VAR_15VAR_8VAR_15.\VAR_15nVAR_15", VAR_15VAR_8VAR_15);

            VAR_15breakVAR_15;

        }

        VAR_15VAR_1VAR_15 -= VAR_15VAR_9VAR_15 + VAR_15VAR_6VAR_15;

        VAR_15nextVAR_15 = VAR_15avio_tellVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15) + VAR_15VAR_6VAR_15;



        VAR_15ifVAR_15 (VAR_15tflagsVAR_15 & VAR_15ID3v2_FLAG_DATALENVAR_15) {

            VAR_15avio_rb32VAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15);

            VAR_15VAR_6VAR_15 -= VAR_154VAR_15;

        }



        VAR_15ifVAR_15 (VAR_15tflagsVAR_15 & (VAR_15ID3v2_FLAG_ENCRYPTIONVAR_15 | VAR_15ID3v2_FLAG_COMPRESSIONVAR_15)) {

            VAR_15av_logVAR_15(VAR_15VAR_0VAR_15, VAR_15AV_LOG_WARNINGVAR_15, "VAR_15SkippingVAR_15 VAR_15encryptedVAR_15/VAR_15compressedVAR_15 VAR_15ID3v2VAR_15 VAR_15frameVAR_15 %VAR_15VAR_0VAR_15.\VAR_15nVAR_15", VAR_15VAR_8VAR_15);

            VAR_15avio_skipVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15VAR_6VAR_15);

        

        } VAR_15elseVAR_15 VAR_15ifVAR_15 (VAR_15VAR_8VAR_15[VAR_150VAR_15] == 'VAR_15TVAR_15' || (VAR_15VAR_4VAR_15 && (VAR_15VAR_13VAR_15 = VAR_15get_extra_meta_funcVAR_15(VAR_15VAR_8VAR_15, VAR_15VAR_5VAR_15)->VAR_15readVAR_15))) {

            VAR_15ifVAR_15 (VAR_15VAR_7VAR_15 || VAR_15tunsyncVAR_15) {

                VAR_15intVAR_15 VAR_15iVAR_15, VAR_15jVAR_15;

                VAR_15av_fast_mallocVAR_15(&VAR_15VAR_11VAR_15, &VAR_15VAR_12VAR_15, VAR_15VAR_6VAR_15);

                VAR_15ifVAR_15 (!VAR_15VAR_11VAR_15) {

                    VAR_15av_logVAR_15(VAR_15VAR_0VAR_15, VAR_15AV_LOG_ERRORVAR_15, "VAR_15FailedVAR_15 VAR_15toVAR_15 VAR_15allocVAR_15 %VAR_15dVAR_15 VAR_15bytesVAR_15\VAR_15nVAR_15", VAR_15VAR_6VAR_15);

                    VAR_15gotoVAR_15 VAR_15seekVAR_15;

                }

                VAR_15forVAR_15 (VAR_15iVAR_15 = VAR_150VAR_15, VAR_15jVAR_15 = VAR_150VAR_15; VAR_15iVAR_15 < VAR_15VAR_6VAR_15; VAR_15iVAR_15++, VAR_15jVAR_15++) {

                    VAR_15VAR_11VAR_15[VAR_15jVAR_15] = VAR_15avio_r8VAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15);

                    VAR_15ifVAR_15 (VAR_15jVAR_15 > VAR_150VAR_15 && !VAR_15VAR_11VAR_15[VAR_15jVAR_15] && VAR_15VAR_11VAR_15[VAR_15jVAR_15 - VAR_151VAR_15] == VAR_150xffVAR_15) {

                        

                        VAR_15jVAR_15--;

                    }

                }

                VAR_15ffio_init_contextVAR_15(&VAR_15pbVAR_15, VAR_15VAR_11VAR_15, VAR_15jVAR_15, VAR_150VAR_15, VAR_15NULLVAR_15, VAR_15NULLVAR_15, VAR_15NULLVAR_15, VAR_15NULLVAR_15);

                VAR_15VAR_6VAR_15 = VAR_15jVAR_15;

                VAR_15pbxVAR_15 = &VAR_15pbVAR_15; 

            } VAR_15elseVAR_15 {

                VAR_15pbxVAR_15 = VAR_15VAR_0VAR_15->VAR_15pbVAR_15; 

            }

            VAR_15ifVAR_15 (VAR_15VAR_8VAR_15[VAR_150VAR_15] == 'VAR_15TVAR_15')

                

                VAR_15read_ttagVAR_15(VAR_15VAR_0VAR_15, VAR_15pbxVAR_15, VAR_15VAR_6VAR_15, VAR_15VAR_8VAR_15);

            VAR_15elseVAR_15

                

                VAR_15VAR_13VAR_15(VAR_15VAR_0VAR_15, VAR_15pbxVAR_15, VAR_15VAR_6VAR_15, VAR_15VAR_8VAR_15, VAR_15VAR_4VAR_15);

        }

        VAR_15elseVAR_15 VAR_15ifVAR_15 (!VAR_15VAR_8VAR_15[VAR_150VAR_15]) {

            VAR_15ifVAR_15 (VAR_15VAR_8VAR_15[VAR_151VAR_15])

                VAR_15av_logVAR_15(VAR_15VAR_0VAR_15, VAR_15AV_LOG_WARNINGVAR_15, "VAR_15invalidVAR_15 VAR_15frameVAR_15 VAR_15idVAR_15, VAR_15assumingVAR_15 VAR_15paddingVAR_15");

            VAR_15avio_skipVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15VAR_6VAR_15);

            VAR_15breakVAR_15;

        }

        

VAR_15seekVAR_15:

        VAR_15avio_seekVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15nextVAR_15, VAR_15SEEK_SETVAR_15);

    }



    VAR_15ifVAR_15 (VAR_15VAR_2VAR_15 == VAR_154VAR_15 && VAR_15VAR_3VAR_15 & VAR_150x10VAR_15) 

        VAR_15endVAR_15 += VAR_1510VAR_15;



  VAR_15errorVAR_15:

    VAR_15ifVAR_15 (VAR_15VAR_10VAR_15)

        VAR_15av_logVAR_15(VAR_15VAR_0VAR_15, VAR_15AV_LOG_INFOVAR_15, "VAR_15ID3v2VAR_15.%VAR_15dVAR_15 VAR_15VAR_8VAR_15 VAR_15skippedVAR_15, VAR_15cannotVAR_15 VAR_15handleVAR_15 %VAR_15VAR_0VAR_15\VAR_15nVAR_15", VAR_15VAR_2VAR_15, VAR_15VAR_10VAR_15);

    VAR_15avio_seekVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15endVAR_15, VAR_15SEEK_SETVAR_15);

    VAR_15av_freeVAR_15(VAR_15VAR_11VAR_15);

    VAR_15returnVAR_15;

}

VAR_15staticVAR_15 VAR_15voidVAR_15 VAR_15ff_id3v2_parseVAR_15(VAR_15AVFormatContextVAR_15 *VAR_15VAR_0VAR_15, VAR_15intVAR_15 VAR_15VAR_1VAR_15, VAR_15uint8_tVAR_15 VAR_15VAR_2VAR_15, VAR_15uint8_tVAR_15 VAR_15VAR_3VAR_15, VAR_15ID3v2ExtraMetaVAR_15 **VAR_15VAR_4VAR_15)
{ VAR_15intVAR_15 VAR_15VAR_5VAR_15, VAR_15VAR_6VAR_15, VAR_15VAR_7VAR_15; VAR_15charVAR_15 VAR_15VAR_8VAR_15[VAR_155VAR_15]; VAR_15int64_tVAR_15 VAR_15nextVAR_15, VAR_15endVAR_15 = VAR_15avio_tellVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15) + VAR_15VAR_1VAR_15; VAR_15intVAR_15 VAR_15VAR_9VAR_15; VAR_15constVAR_15 VAR_15charVAR_15 *VAR_15VAR_10VAR_15 = VAR_15NULLVAR_15; VAR_15AVIOContextVAR_15 VAR_15pbVAR_15; VAR_15AVIOContextVAR_15 *VAR_15pbxVAR_15; VAR_15unsignedVAR_15 VAR_15charVAR_15 *VAR_15VAR_11VAR_15 = VAR_15NULLVAR_15; VAR_15intVAR_15 VAR_15VAR_12VAR_15 = VAR_150VAR_15; VAR_15voidVAR_15 (*VAR_15VAR_13VAR_15)(VAR_15AVFormatContextVAR_15*, VAR_15AVIOContextVAR_15*, VAR_15intVAR_15, VAR_15charVAR_15*, VAR_15ID3v2ExtraMetaVAR_15**) = VAR_15NULLVAR_15; VAR_15switchVAR_15 (VAR_15VAR_2VAR_15) { VAR_15caseVAR_15 VAR_152VAR_15:
VAR_15ifVAR_15 (VAR_15VAR_3VAR_15 & VAR_150x40VAR_15) { VAR_15VAR_10VAR_15 = "VAR_15compressionVAR_15"; VAR_15gotoVAR_15 VAR_15errorVAR_15; } VAR_15VAR_5VAR_15 = VAR_150VAR_15; VAR_15VAR_9VAR_15 = VAR_156VAR_15; VAR_15breakVAR_15; VAR_15caseVAR_15 VAR_153VAR_15:
VAR_15caseVAR_15 VAR_154VAR_15:
VAR_15VAR_5VAR_15 = VAR_151VAR_15; VAR_15VAR_9VAR_15 = VAR_1510VAR_15; VAR_15breakVAR_15; VAR_15defaultVAR_15:
VAR_15VAR_10VAR_15 = "VAR_15VAR_2VAR_15"; VAR_15gotoVAR_15 VAR_15errorVAR_15; } VAR_15VAR_7VAR_15 = VAR_15VAR_3VAR_15 & VAR_150x80VAR_15; VAR_15ifVAR_15 (VAR_15VAR_5VAR_15 && VAR_15VAR_3VAR_15 & VAR_150x40VAR_15)
VAR_15avio_skipVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15get_sizeVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_154VAR_15)); VAR_15whileVAR_15 (VAR_15VAR_1VAR_15 >= VAR_15VAR_9VAR_15) { VAR_15unsignedVAR_15 VAR_15intVAR_15 VAR_15tflagsVAR_15 = VAR_150VAR_15; VAR_15intVAR_15 VAR_15tunsyncVAR_15 = VAR_150VAR_15; VAR_15ifVAR_15 (VAR_15VAR_5VAR_15) { VAR_15avio_readVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15VAR_8VAR_15, VAR_154VAR_15); VAR_15VAR_8VAR_15[VAR_154VAR_15] = VAR_150VAR_15; VAR_15ifVAR_15(VAR_15VAR_2VAR_15==VAR_153VAR_15){ VAR_15VAR_6VAR_15 = VAR_15avio_rb32VAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15); }VAR_15elseVAR_15 VAR_15VAR_6VAR_15 = VAR_15get_sizeVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_154VAR_15); VAR_15tflagsVAR_15 = VAR_15avio_rb16VAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15); VAR_15tunsyncVAR_15 = VAR_15tflagsVAR_15 & VAR_15ID3v2_FLAG_UNSYNCHVAR_15; } VAR_15elseVAR_15 { VAR_15avio_readVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15VAR_8VAR_15, VAR_153VAR_15); VAR_15VAR_8VAR_15[VAR_153VAR_15] = VAR_150VAR_15; VAR_15VAR_6VAR_15 = VAR_15avio_rb24VAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15); } VAR_15ifVAR_15 (VAR_15VAR_6VAR_15 <= VAR_150VAR_15 || VAR_15VAR_6VAR_15 > VAR_15VAR_1VAR_15 - VAR_15VAR_9VAR_15) { VAR_15av_logVAR_15(VAR_15VAR_0VAR_15, VAR_15AV_LOG_WARNINGVAR_15, "VAR_15InvalidVAR_15 VAR_15sizeVAR_15 VAR_15inVAR_15 VAR_15frameVAR_15 %VAR_15VAR_0VAR_15, VAR_15skippingVAR_15 VAR_15theVAR_15 VAR_15restVAR_15 VAR_15ofVAR_15 VAR_15VAR_8VAR_15.\VAR_15nVAR_15", VAR_15VAR_8VAR_15); VAR_15breakVAR_15; } VAR_15VAR_1VAR_15 -= VAR_15VAR_9VAR_15 + VAR_15VAR_6VAR_15; VAR_15nextVAR_15 = VAR_15avio_tellVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15) + VAR_15VAR_6VAR_15; VAR_15ifVAR_15 (VAR_15tflagsVAR_15 & VAR_15ID3v2_FLAG_DATALENVAR_15) { VAR_15avio_rb32VAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15); VAR_15VAR_6VAR_15 -= VAR_154VAR_15; } VAR_15ifVAR_15 (VAR_15tflagsVAR_15 & (VAR_15ID3v2_FLAG_ENCRYPTIONVAR_15 | VAR_15ID3v2_FLAG_COMPRESSIONVAR_15)) { VAR_15av_logVAR_15(VAR_15VAR_0VAR_15, VAR_15AV_LOG_WARNINGVAR_15, "VAR_15SkippingVAR_15 VAR_15encryptedVAR_15/VAR_15compressedVAR_15 VAR_15ID3v2VAR_15 VAR_15frameVAR_15 %VAR_15VAR_0VAR_15.\VAR_15nVAR_15", VAR_15VAR_8VAR_15); VAR_15avio_skipVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15VAR_6VAR_15); } VAR_15elseVAR_15 VAR_15ifVAR_15 (VAR_15VAR_8VAR_15[VAR_150VAR_15] == 'VAR_15TVAR_15' || (VAR_15VAR_4VAR_15 && (VAR_15VAR_13VAR_15 = VAR_15get_extra_meta_funcVAR_15(VAR_15VAR_8VAR_15, VAR_15VAR_5VAR_15)->VAR_15readVAR_15))) { VAR_15ifVAR_15 (VAR_15VAR_7VAR_15 || VAR_15tunsyncVAR_15) { VAR_15intVAR_15 VAR_15iVAR_15, VAR_15jVAR_15; VAR_15av_fast_mallocVAR_15(&VAR_15VAR_11VAR_15, &VAR_15VAR_12VAR_15, VAR_15VAR_6VAR_15); VAR_15ifVAR_15 (!VAR_15VAR_11VAR_15) { VAR_15av_logVAR_15(VAR_15VAR_0VAR_15, VAR_15AV_LOG_ERRORVAR_15, "VAR_15FailedVAR_15 VAR_15toVAR_15 VAR_15allocVAR_15 %VAR_15dVAR_15 VAR_15bytesVAR_15\VAR_15nVAR_15", VAR_15VAR_6VAR_15); VAR_15gotoVAR_15 VAR_15seekVAR_15; } VAR_15forVAR_15 (VAR_15iVAR_15 = VAR_150VAR_15, VAR_15jVAR_15 = VAR_150VAR_15; VAR_15iVAR_15 < VAR_15VAR_6VAR_15; VAR_15iVAR_15++, VAR_15jVAR_15++) { VAR_15VAR_11VAR_15[VAR_15jVAR_15] = VAR_15avio_r8VAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15); VAR_15ifVAR_15 (VAR_15jVAR_15 > VAR_150VAR_15 && !VAR_15VAR_11VAR_15[VAR_15jVAR_15] && VAR_15VAR_11VAR_15[VAR_15jVAR_15 - VAR_151VAR_15] == VAR_150xffVAR_15) { VAR_15jVAR_15--; } } VAR_15ffio_init_contextVAR_15(&VAR_15pbVAR_15, VAR_15VAR_11VAR_15, VAR_15jVAR_15, VAR_150VAR_15, VAR_15NULLVAR_15, VAR_15NULLVAR_15, VAR_15NULLVAR_15, VAR_15NULLVAR_15); VAR_15VAR_6VAR_15 = VAR_15jVAR_15; VAR_15pbxVAR_15 = &VAR_15pbVAR_15; } VAR_15elseVAR_15 { VAR_15pbxVAR_15 = VAR_15VAR_0VAR_15->VAR_15pbVAR_15; } VAR_15ifVAR_15 (VAR_15VAR_8VAR_15[VAR_150VAR_15] == 'VAR_15TVAR_15')
VAR_15read_ttagVAR_15(VAR_15VAR_0VAR_15, VAR_15pbxVAR_15, VAR_15VAR_6VAR_15, VAR_15VAR_8VAR_15); VAR_15elseVAR_15
VAR_15VAR_13VAR_15(VAR_15VAR_0VAR_15, VAR_15pbxVAR_15, VAR_15VAR_6VAR_15, VAR_15VAR_8VAR_15, VAR_15VAR_4VAR_15); } VAR_15elseVAR_15 VAR_15ifVAR_15 (!VAR_15VAR_8VAR_15[VAR_150VAR_15]) { VAR_15ifVAR_15 (VAR_15VAR_8VAR_15[VAR_151VAR_15])
VAR_15av_logVAR_15(VAR_15VAR_0VAR_15, VAR_15AV_LOG_WARNINGVAR_15, "VAR_15invalidVAR_15 VAR_15frameVAR_15 VAR_15idVAR_15, VAR_15assumingVAR_15 VAR_15paddingVAR_15"); VAR_15avio_skipVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15VAR_6VAR_15); VAR_15breakVAR_15; } VAR_15seekVAR_15:
VAR_15avio_seekVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15nextVAR_15, VAR_15SEEK_SETVAR_15); } VAR_15ifVAR_15 (VAR_15VAR_2VAR_15 == VAR_154VAR_15 && VAR_15VAR_3VAR_15 & VAR_150x10VAR_15)
VAR_15endVAR_15 += VAR_1510VAR_15; VAR_15errorVAR_15:
VAR_15ifVAR_15 (VAR_15VAR_10VAR_15)
VAR_15av_logVAR_15(VAR_15VAR_0VAR_15, VAR_15AV_LOG_INFOVAR_15, "VAR_15ID3v2VAR_15.%VAR_15dVAR_15 VAR_15VAR_8VAR_15 VAR_15skippedVAR_15, VAR_15cannotVAR_15 VAR_15handleVAR_15 %VAR_15VAR_0VAR_15\VAR_15nVAR_15", VAR_15VAR_2VAR_15, VAR_15VAR_10VAR_15); VAR_15avio_seekVAR_15(VAR_15VAR_0VAR_15->VAR_15pbVAR_15, VAR_15endVAR_15, VAR_15SEEK_SETVAR_15); VAR_15av_freeVAR_15(VAR_15VAR_11VAR_15); VAR_15returnVAR_15; }