1diff -ruN id3lib-3.8.3.orig/ChangeLog id3lib-3.8.3/ChangeLog
2--- id3lib-3.8.3.orig/ChangeLog	2003-03-02 01:23:00.000000000 +0100
3+++ id3lib-3.8.3/ChangeLog	2006-02-22 00:33:59.946214472 +0100
4@@ -1,3 +1,8 @@
5+2006-02-17  Jerome Couderc
6+
7+    * Patch from Spoon to fix UTF-16 writing bug
8+      http://sourceforge.net/tracker/index.php?func=detail&aid=1016290&group_id=979&atid=300979
9+
10 2003-03-02 Sunday 17:38   Thijmen Klok <thijmen@id3lib.org>
11
12 	* THANKS (1.20): added more people
13diff -ruN id3lib-3.8.3.orig/src/io_helpers.cpp id3lib-3.8.3/src/io_helpers.cpp
14--- id3lib-3.8.3.orig/src/io_helpers.cpp	2003-03-02 01:23:00.000000000 +0100
15+++ id3lib-3.8.3/src/io_helpers.cpp	2006-02-22 00:35:02.926639992 +0100
16@@ -363,11 +363,22 @@
17     // Write the BOM: 0xFEFF
18     unicode_t BOM = 0xFEFF;
19     writer.writeChars((const unsigned char*) &BOM, 2);
20+    // Patch from Spoon : 2004-08-25 14:17
21+    //   http://sourceforge.net/tracker/index.php?func=detail&aid=1016290&group_id=979&atid=300979
22+    // Wrong code
23+    //for (size_t i = 0; i < size; i += 2)
24+    //{
25+    //  unicode_t ch = (data[i] << 8) | data[i+1];
26+    //  writer.writeChars((const unsigned char*) &ch, 2);
27+    //}
28+    // Right code
29+    unsigned char *pdata = (unsigned char *) data.c_str();
30     for (size_t i = 0; i < size; i += 2)
31     {
32-      unicode_t ch = (data[i] << 8) | data[i+1];
33+      unicode_t ch = (pdata[i] << 8) | pdata[i+1];
34       writer.writeChars((const unsigned char*) &ch, 2);
35     }
36+    // End patch
37   }
38   return writer.getCur() - beg;
39 }
40