diff options
Diffstat (limited to 'lib/rbcodec/metadata/asf.c')
-rw-r--r-- | lib/rbcodec/metadata/asf.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/lib/rbcodec/metadata/asf.c b/lib/rbcodec/metadata/asf.c index 82c418cc73..f342a473ea 100644 --- a/lib/rbcodec/metadata/asf.c +++ b/lib/rbcodec/metadata/asf.c | |||
@@ -515,17 +515,17 @@ static int asf_parse_header(int fd, struct mp3entry* id3, | |||
515 | /* Expected is either "01 00 xx xx 03 yy yy yy yy" or | 515 | /* Expected is either "01 00 xx xx 03 yy yy yy yy" or |
516 | * "03 yy yy yy yy". xx is the size of the WM/Picture | 516 | * "03 yy yy yy yy". xx is the size of the WM/Picture |
517 | * container in bytes. yy equals the raw data length of | 517 | * container in bytes. yy equals the raw data length of |
518 | * the embedded image. */ | 518 | * the embedded image. |
519 | lseek(fd, -4, SEEK_CUR); | 519 | * |
520 | * Also save position after this tag in file in case any parsing errors */ | ||
521 | uint32_t after_pic_pos = lseek(fd, -4, SEEK_CUR) + 4 + length; | ||
522 | |||
520 | if (read(fd, &type, 1) != 1) | 523 | if (read(fd, &type, 1) != 1) |
521 | type = 0; | 524 | type = 0; |
522 | 525 | ||
523 | if (type == 1) { | 526 | if (type == 1) { |
524 | lseek(fd, 3, SEEK_CUR); | 527 | lseek(fd, 3, SEEK_CUR); |
525 | read(fd, &type, 1); | 528 | read(fd, &type, 1); |
526 | /* In case the parsing will fail in the next step we | ||
527 | * might at least be able to skip the whole section. */ | ||
528 | datalength = length - 1; | ||
529 | } | 529 | } |
530 | if (type == 3) { | 530 | if (type == 3) { |
531 | /* Read the raw data length of the embedded image. */ | 531 | /* Read the raw data length of the embedded image. */ |
@@ -570,7 +570,7 @@ static int asf_parse_header(int fd, struct mp3entry* id3, | |||
570 | } | 570 | } |
571 | } | 571 | } |
572 | 572 | ||
573 | lseek(fd, datalength, SEEK_CUR); | 573 | lseek(fd, after_pic_pos, SEEK_SET); |
574 | #endif | 574 | #endif |
575 | } else if (!strncmp("replaygain_", utf8buf, 11)) { | 575 | } else if (!strncmp("replaygain_", utf8buf, 11)) { |
576 | char *value = id3buf; | 576 | char *value = id3buf; |