Просмотр исходного кода

finally found the problem for oom killer with mpd, add Debian patches which fixes it, evil µ in ID3 tag

Waldemar Brodkorb 11 лет назад
Родитель
Сommit
232f2bdaac

+ 1 - 1
package/libid3tag/Makefile

@@ -5,7 +5,7 @@ include ${TOPDIR}/rules.mk
 
 PKG_NAME:=		libid3tag
 PKG_VERSION:=		0.15.1b
-PKG_RELEASE:=		1
+PKG_RELEASE:=		2
 PKG_MD5SUM:=		e5808ad997ba32c498803822078748c3
 PKG_DESCR:=		an ID3 tag manipulation library
 PKG_SECTION:=		libs

+ 13 - 0
package/libid3tag/patches/patch-compat_gperf

@@ -0,0 +1,13 @@
+--- libid3tag-0.15.1b.orig/compat.gperf	2004-01-23 10:41:32.000000000 +0100
++++ libid3tag-0.15.1b/compat.gperf	2013-10-16 12:34:31.000000000 +0200
+@@ -236,6 +236,10 @@ int id3_compat_fixup(struct id3_tag *tag
+ 
+     encoding = id3_parse_uint(&data, 1);
+     string   = id3_parse_string(&data, end - data, encoding, 0);
++    if (!string)
++    {
++	continue;
++    }
+ 
+     if (id3_ucs4_length(string) < 4) {
+       free(string);

+ 22 - 0
package/libid3tag/patches/patch-genre_dat

@@ -0,0 +1,22 @@
+--- libid3tag-0.15.1b.orig/genre.dat	2004-02-17 03:34:39.000000000 +0100
++++ libid3tag-0.15.1b/genre.dat	2013-10-16 12:34:37.000000000 +0200
+@@ -277,8 +277,8 @@ static id3_ucs4_t const genre_PUNK_ROCK[
+   { 'P', 'u', 'n', 'k', ' ', 'R', 'o', 'c', 'k', 0 };
+ static id3_ucs4_t const genre_DRUM_SOLO[] =
+   { 'D', 'r', 'u', 'm', ' ', 'S', 'o', 'l', 'o', 0 };
+-static id3_ucs4_t const genre_A_CAPPELLA[] =
+-  { 'A', ' ', 'C', 'a', 'p', 'p', 'e', 'l', 'l', 'a', 0 };
++static id3_ucs4_t const genre_A_CAPELLA[] =
++  { 'A', ' ', 'C', 'a', 'p', 'e', 'l', 'l', 'a', 0 };
+ static id3_ucs4_t const genre_EURO_HOUSE[] =
+   { 'E', 'u', 'r', 'o', '-', 'H', 'o', 'u', 's', 'e', 0 };
+ static id3_ucs4_t const genre_DANCE_HALL[] =
+@@ -452,7 +452,7 @@ static id3_ucs4_t const *const genre_tab
+   genre_DUET,
+   genre_PUNK_ROCK,
+   genre_DRUM_SOLO,
+-  genre_A_CAPPELLA,
++  genre_A_CAPELLA,
+   genre_EURO_HOUSE,
+   genre_DANCE_HALL,
+   genre_GOA,

+ 11 - 0
package/libid3tag/patches/patch-genre_dat_in

@@ -0,0 +1,11 @@
+--- libid3tag-0.15.1b.orig/genre.dat.in	2004-01-23 10:41:32.000000000 +0100
++++ libid3tag-0.15.1b/genre.dat.in	2013-10-16 12:34:37.000000000 +0200
+@@ -153,7 +153,7 @@ Freestyle
+ Duet
+ Punk Rock
+ Drum Solo
+-A Cappella
++A Capella
+ Euro-House
+ Dance Hall
+ Goa

+ 12 - 0
package/libid3tag/patches/patch-parse_c

@@ -0,0 +1,12 @@
+--- libid3tag-0.15.1b.orig/parse.c	2004-01-23 10:41:32.000000000 +0100
++++ libid3tag-0.15.1b/parse.c	2013-10-16 12:34:31.000000000 +0200
+@@ -165,6 +165,9 @@ id3_ucs4_t *id3_parse_string(id3_byte_t
+   case ID3_FIELD_TEXTENCODING_UTF_8:
+     ucs4 = id3_utf8_deserialize(ptr, length);
+     break;
++  default:
++  	/* FIXME: Unknown encoding! Print warning? */
++	return NULL;
+   }
+ 
+   if (ucs4 && !full) {

+ 21 - 0
package/libid3tag/patches/patch-utf16_c

@@ -0,0 +1,21 @@
+--- 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;
+ }