[tracker] extract-mp3: Stop processing after finding padding



commit c541a8c5229621017a477eea8c80a84abd826fc1
Author: Carlos Garnacho <carlosg gnome org>
Date:   Fri Jul 3 19:18:57 2015 +0200

    extract-mp3: Stop processing after finding padding
    
    ID3v2[0-4] Allows the possibility of some padding at the end of an
    ID3 block, defined to be filled with 0x00, just in case later tag
    additions don't cause a full rewrite of the file. This means there's
    nothing for us when we hit this.
    
    ID3v2.4 also defines the existence of "ID3 footers", those always
    start as "3ID", and should be skipped for our purposes, as those
    are basically a mirror of the ID3 block.
    
    This most notably avoids a bunch of "Ignoring unknown frame ''"
    spew on -v 3 logs, as padding is fairly common.

 src/tracker-extract/tracker-extract-mp3.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)
---
diff --git a/src/tracker-extract/tracker-extract-mp3.c b/src/tracker-extract/tracker-extract-mp3.c
index b2efe9c..f3d1bcb 100644
--- a/src/tracker-extract/tracker-extract-mp3.c
+++ b/src/tracker-extract/tracker-extract-mp3.c
@@ -1856,6 +1856,17 @@ parse_id3v24 (const gchar           *data,
                }
 
                frame_name = &data[pos];
+
+               /* We found padding after all frames */
+               if (frame_name[0] == '\0')
+                       break;
+
+               /* We found a IDv2 footer */
+               if (frame_name[0] == '3' &&
+                   frame_name[1] == 'D' &&
+                   frame_name[2] == 'I')
+                       break;
+
                frame = id3v24_get_frame (frame_name);
 
                csize = (((data[pos+4] & 0x7F) << 21) |
@@ -2049,6 +2060,11 @@ parse_id3v23 (const gchar          *data,
                }
 
                frame_name = &data[pos];
+
+               /* We found padding after all frames */
+               if (frame_name[0] == '\0')
+                       break;
+
                frame = id3v24_get_frame (frame_name);
 
                csize = (((unsigned char)(data[pos + 4]) << 24) |
@@ -2174,6 +2190,11 @@ parse_id3v20 (const gchar          *data,
                }
 
                frame_name = &data[pos];
+
+               /* We found padding after all frames */
+               if (frame_name[0] == '\0')
+                       break;
+
                frame = id3v2_get_frame (frame_name);
 
                csize = (((unsigned char)(data[pos + 3]) << 16) +


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]