aboutsummaryrefslogtreecommitdiff
path: root/audio/libcdaudio/files/patch-CVE-2008-5030.2005-0706
blob: 6ecdaa41091d4b04b2f6befb78393fa40efb0257 (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
--- src/cddb.c.orig	2004-09-09 01:26:39 UTC
+++ src/cddb.c
@@ -1052,7 +1052,8 @@ cddb_query(int cd_desc, int sock,
     }
 	   
     query->query_matches = 0;
-    while(!cddb_read_line(sock, inbuffer, 256)) {
+    while(query->query_matches < MAX_INEXACT_MATCHES &&
+        !cddb_read_line(sock, inbuffer, 256)) {
       slashed = 0;
       if(strchr(inbuffer, '/') != NULL && parse_disc_artist) {
 	index = 0;
@@ -1601,7 +1602,7 @@ cddb_read_disc_data(int cd_desc, struct 
     return -1;
   }
    
-  if((inbuffer = malloc(256)) == NULL) {
+  if((inbuffer = malloc(512)) == NULL) {
     free(root_dir);
     free(file);
     return -1;
--- src/coverart.c.orig	2003-02-12 17:56:55 UTC
+++ src/coverart.c
@@ -131,7 +131,9 @@ coverart_process_line(char *line, struct
     }
   } else if(strncmp(line, "Album", 5) == 0) {
     long n = strtol((char *)line + 5, NULL, 10);
-    if(parse_disc_artist && strchr(procbuffer, '/') != NULL) {
+    if(n >= MAX_INEXACT_MATCHES) {
+      // Too much data, can't store it
+    } else if(parse_disc_artist && strchr(procbuffer, '/') != NULL) {
       strtok(procbuffer, "/");
       strncpy(query->query_list[n].list_artist, procbuffer,
 	      (strlen(procbuffer) < 64) ? (strlen(procbuffer) - 1) : 64); 
@@ -143,7 +145,9 @@ coverart_process_line(char *line, struct
     }
   } else if(strncmp(line, "Url", 3) == 0) {
     long n = strtol((char *)line + 3, NULL, 10);
-    cddb_process_url(&query->query_list[n].list_host, procbuffer);
+    if (n < MAX_INEXACT_MATCHES) {
+      cddb_process_url(&query->query_list[n].list_host, procbuffer);
+    }
   }
 
   return;