--- libid3tag-0.15.1b.orig/utf16.c	2004-01-23 10:41:32.000000000 +0100
+++ libid3tag-0.15.1b/utf16.c	2013-10-16 12:34:27.000000000 +0200
@@ -282,5 +282,18 @@ id3_ucs4_t *id3_utf16_deserialize(id3_by
 
   free(utf16);
 
+  if (end == *ptr && length % 2 != 0)
+  {
+     /* We were called with a bogus length.  It should always
+      * be an even number.  We can deal with this in a few ways:
+      * - Always give an error.
+      * - Try and parse as much as we can and
+      *   - return an error if we're called again when we
+      *     already tried to parse everything we can.
+      *   - tell that we parsed it, which is what we do here.
+      */
+     (*ptr)++;
+  }
+
   return ucs4;
 }
