From f3d619601631704a98e2d0f9767e2df2ce6f6bd2 Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Sat, 19 Oct 2024 10:24:27 +0300 Subject: Codecs: wma: don't fail in case parsing errors in album art Fixes FS#12576 (album art is not shown but file is now playable) Change-Id: Idc8e1dcf7b5760b4fd37c43913a534ed4eae512a --- lib/rbcodec/metadata/asf.c | 12 ++++++------ 1 file 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, /* Expected is either "01 00 xx xx 03 yy yy yy yy" or * "03 yy yy yy yy". xx is the size of the WM/Picture * container in bytes. yy equals the raw data length of - * the embedded image. */ - lseek(fd, -4, SEEK_CUR); + * the embedded image. + * + * Also save position after this tag in file in case any parsing errors */ + uint32_t after_pic_pos = lseek(fd, -4, SEEK_CUR) + 4 + length; + if (read(fd, &type, 1) != 1) type = 0; if (type == 1) { lseek(fd, 3, SEEK_CUR); read(fd, &type, 1); - /* In case the parsing will fail in the next step we - * might at least be able to skip the whole section. */ - datalength = length - 1; } if (type == 3) { /* Read the raw data length of the embedded image. */ @@ -570,7 +570,7 @@ static int asf_parse_header(int fd, struct mp3entry* id3, } } - lseek(fd, datalength, SEEK_CUR); + lseek(fd, after_pic_pos, SEEK_SET); #endif } else if (!strncmp("replaygain_", utf8buf, 11)) { char *value = id3buf; -- cgit v1.2.3