I ran into this problem recently with some podcasts. The problem is
that APIC (2.3+) and PIC (2.2) handle file type differently. APIC uses
a Latin-1 string followed by a nul byte to represent file types. Say,
"image/png\0". PIC, on the other hand, uses just three bytes, so "PNG"
(no termination). As the parser currently searches for the next nul
byte, and 2.2 doesn't have one in the traditional place, the parsing
goes haywire and the frame corrupts.<br>
<br>

<div>The TagLib# AttachedPictureFrame (<a href="https://forgesvn1.novell.com/viewsvn/taglib-sharp/trunk/taglib-sharp/src/TagLib/Id3v2/Frames/AttachedPictureFrame.cs?view=markup" title="https://forgesvn1.novell.com/viewsvn/taglib-sharp/trunk/taglib-sharp/src/TagLib/Id3v2/Frames/AttachedPictureFrame.cs?view=markup" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

https://forgesvn1.novell.com/viewsvn/taglib-sharp/trunk/taglib-sharp/src/TagLib/Id3v2/Frames/AttachedPictureFrame.cs?view=markup</a>) does the following:<br><br><pre>         int pos = 0;<br><br>         text_encoding = (StringType) data [pos];
<br><br>         pos += 1;<br>         <br>         int offset;<br>         <br>         if (Header.Version &gt; 2)<br>         {<br>            offset = data.Find (TextDelimiter (StringType.Latin1), pos);<br><br>            if(offset &lt; pos)
<br>               return;<br><br>            mime_type = data.Mid (pos, offset - pos).ToString (StringType.Latin1);<br>            pos = offset + 1;<br>         }<br>         else<br>         {<br>            ByteVector ext = 
data.Mid (pos, 3);<br>            if (ext == &quot;JPG&quot;)<br>               mime_type = &quot;image/jpeg&quot;;<br>            else if (ext == &quot;PNG&quot;)<br>               mime_type = &quot;image/png&quot;;<br>            else
<br><br>               mime_type = &quot;image/unknown&quot;;<br>            <br>            pos += 3;<br>         }</pre></div>
<br>- Brian Nickel<br><br><div><span class="gmail_quote">On 7/13/06, <b class="gmail_sendername">Scott Wheeler</b> &lt;<a href="mailto:wheeler@kde.org">wheeler@kde.org</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>On Jul 13, 2006, at 11:13 PM, Norman Palardy wrote:<br><br>&gt;<br>&gt; On Jul 13, 2006, at 2:51 PM, Scott Wheeler wrote:<br>&gt;<br>&gt;&gt;<br>&gt;&gt; On Jul 13, 2006, at 10:19 PM, Norman Palardy wrote:<br>&gt;&gt;
<br>&gt;&gt;&gt; I'm working with a few mp3 files from various sources.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; There seems to be a couple that have very odd attached pictures that<br>&gt;&gt;&gt; taglib gets just slightly wrong.
<br>&gt;&gt;&gt; Apple's iTunes and MS' Windows Media seem to handle these though.<br>&gt;&gt;<br>&gt;&gt; Just a guess, but this may be the fact that iTunes has a bug in its<br>&gt;&gt; synch safe integer implementation (it doesn't use them, basically),
<br>&gt;&gt; so it ends up writing invalid lengths for images which messes things<br>&gt;&gt; up in some cases.&nbsp;&nbsp;WMP may have a work around for the iTunes bug.<br>&gt;&gt; What are the sizes of the images that aren't being read properly?
<br>&gt;<br>&gt; Manually I copied the data based on the values in the frame (what<br>&gt; appears to me to be a a PIC frame) into a new file, saved it and<br>&gt; then opened it in a image editor. So the value seems to be correct.
<br>&gt; It was only 49974 bytes.<br>&gt;<br>&gt; The first 512 bytes of the file are (a snapshot from the hex editor<br>&gt; I use)<br>&gt; &lt;Picture 1.png&gt;<br>&gt;<br>&gt; When I retrieve the apic frame and iterate over the bytes I see
<br>&gt; that the first 11 bytes of the picture data are not part of the<br>&gt; returned data<br><br>Ah, it's ID3v2.2 -- indeed I haven't really tested APIC (or rather<br>&quot;PIC&quot; in ID3v2.2 terms).&nbsp;&nbsp;It would be useful if you could file a bug
<br>report (and ideally send me the file with the filename as [bug report<br>number].mp3 since I won't be able to seriously look at the issue for<br>a few days and things less often get lost in the bug system.<br><br>Cheers,
<br><br>-Scott<br>_______________________________________________<br>taglib-devel mailing list<br><a href="mailto:taglib-devel@kde.org">taglib-devel@kde.org</a><br><a href="https://mail.kde.org/mailman/listinfo/taglib-devel">
https://mail.kde.org/mailman/listinfo/taglib-devel</a><br></blockquote></div><br>