summary refs log tree commit diff
path: root/pkgs/development/libraries/libid3tag/debian-patches.patch
blob: 0a828b334cf8e95dc94a878b7b67debb0ee1413e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
diff --git a/compat.gperf b/compat.gperf
index 4e24613..5635980 100644
--- a/compat.gperf
+++ b/compat.gperf
@@ -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);
diff --git a/genre.dat b/genre.dat
index 17acab5..1f02779 100644
--- a/genre.dat
+++ b/genre.dat
@@ -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_table[] = {
   genre_DUET,
   genre_PUNK_ROCK,
   genre_DRUM_SOLO,
-  genre_A_CAPPELLA,
+  genre_A_CAPELLA,
   genre_EURO_HOUSE,
   genre_DANCE_HALL,
   genre_GOA,
diff --git a/genre.dat.in b/genre.dat.in
index 872de40..e71e34b 100644
--- a/genre.dat.in
+++ b/genre.dat.in
@@ -153,7 +153,7 @@ Freestyle
 Duet
 Punk Rock
 Drum Solo
-A Cappella
+A Capella
 Euro-House
 Dance Hall
 Goa
diff --git a/parse.c b/parse.c
index 86a3f21..947c249 100644
--- a/parse.c
+++ b/parse.c
@@ -165,6 +165,9 @@ id3_ucs4_t *id3_parse_string(id3_byte_t const **ptr, id3_length_t length,
   case ID3_FIELD_TEXTENCODING_UTF_8:
     ucs4 = id3_utf8_deserialize(ptr, length);
     break;
+  default:
+  	/* FIXME: Unknown encoding! Print warning? */
+	return NULL;
   }

   if (ucs4 && !full) {
diff --git a/utf16.c b/utf16.c
index 70ee9d5..6e60a75 100644
--- a/utf16.c
+++ b/utf16.c
@@ -282,5 +282,18 @@ id3_ucs4_t *id3_utf16_deserialize(id3_byte_t const **ptr, id3_length_t length,

   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;
 }