Project

General

Profile

0001-libaudtag-Verify-tag-length-info-against-decoder-len.patch

[PATCH] libaudtag: Verify tag length info against decoder length - Hans de Goede, May 01, 2014 21:03

View differences:

src/libaudtag/id3/id3-common.c
114 114
    str_unref (text);
115 115
}
116 116

  
117
/* associate_int for FIELD_LENGTH which sanity checks the length */
118
void id3_associate_length (Tuple * tuple, const char * data, int size)
119
{
120
    char * text = id3_decode_text (data, size);
121
    int decoder_length, tag_length;
122

  
123
    if (text && atoi (text) >= 0) {
124
	    decoder_length = tuple_get_int (tuple, FIELD_LENGTH);
125
	    tag_length = atoi (text);
126

  
127
	    /* If the decoder has already set an (approximate) length, use it to
128
	     * verify the length from the tag, as that is sometimes bogus */
129
	    if (decoder_length <= 0 ||
130
		    (tag_length > (decoder_length / 2) &&
131
		     tag_length < (decoder_length * 2)))
132
                tuple_set_int (tuple, FIELD_LENGTH, atoi (text));
133
    }
134

  
135
    str_unref (text);
136
}
137

  
117 138
void id3_decode_genre (Tuple * tuple, const char * data, int size)
118 139
{
119 140
    char * text = id3_decode_text (data, size);
src/libaudtag/id3/id3-common.h
25 25

  
26 26
void id3_associate_string (Tuple * tuple, int field, const char * data, int size);
27 27
void id3_associate_int (Tuple * tuple, int field, const char * data, int size);
28
void id3_associate_length (Tuple * tuple, const char * data, int size);
28 29
void id3_decode_genre (Tuple * tuple, const char * data, int size);
29 30
void id3_decode_comment (Tuple * tuple, const char * data, int size);
30 31
void id3_decode_rva (Tuple * tuple, const char * data, int size);
src/libaudtag/id3/id3v22.c
249 249
            id3_associate_string (tuple, FIELD_DATE, data, size);
250 250
            break;
251 251
          case ID3_LENGTH:
252
            id3_associate_int (tuple, FIELD_LENGTH, data, size);
252
            id3_associate_length (tuple, data, size);
253 253
            break;
254 254
          case ID3_FUCKO_ARTIST:
255 255
          case ID3_ARTIST:
src/libaudtag/id3/id3v24.c
653 653
            id3_associate_string (tuple, FIELD_DATE, data, size);
654 654
            break;
655 655
          case ID3_LENGTH:
656
            id3_associate_int (tuple, FIELD_LENGTH, data, size);
656
            id3_associate_length (tuple, data, size);
657 657
            break;
658 658
          case ID3_ARTIST:
659 659
            id3_associate_string (tuple, FIELD_ARTIST, data, size);
660
-