summaryrefslogtreecommitdiff
path: root/libraries/id3lib/patches/31-fix-utf16-stringlists.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/id3lib/patches/31-fix-utf16-stringlists.patch')
-rw-r--r--libraries/id3lib/patches/31-fix-utf16-stringlists.patch24
1 files changed, 24 insertions, 0 deletions
diff --git a/libraries/id3lib/patches/31-fix-utf16-stringlists.patch b/libraries/id3lib/patches/31-fix-utf16-stringlists.patch
new file mode 100644
index 0000000000..3582238743
--- /dev/null
+++ b/libraries/id3lib/patches/31-fix-utf16-stringlists.patch
@@ -0,0 +1,24 @@
+This patch fixes tag corruption after pipe characters.
+
+Author: Urs Fleisch <urs.fleisch@gmail.com>
+Fixes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680915
+--- a/src/io_helpers.cpp
++++ b/src/io_helpers.cpp
+@@ -373,10 +373,17 @@
+ //}
+ // Right code
+ unsigned char *pdata = (unsigned char *) data.c_str();
++ unicode_t lastCh = BOM;
+ for (size_t i = 0; i < size; i += 2)
+ {
+ unicode_t ch = (pdata[i] << 8) | pdata[i+1];
++ if (lastCh == 0 && ch != BOM)
++ {
++ // Last character was NULL, so start next string with BOM.
++ writer.writeChars((const unsigned char*) &BOM, 2);
++ }
+ writer.writeChars((const unsigned char*) &ch, 2);
++ lastCh = ch;
+ }
+ // End patch
+ }