$NetBSD: patch-ab,v 1.1 2007/08/14 21:41:06 drochner Exp $

--- lib/http.c.orig	2006-08-25 04:01:49.000000000 +0200
+++ lib/http.c
@@ -258,11 +258,11 @@ httplib_construct_page_request (const ch
 
 /* Return 1 if a match was found, 0 if not found */
 int
-extract_header_value (char *header, char *dest, char *match)
+extract_header_value (char *header, char *dest, char *match, int maxlen)
 {
     char* start = (char *)strstr(header, match);
     if (start) {
-	subnstr_until(start+strlen(match), "\n", dest, MAX_ICY_STRING);
+	subnstr_until(start+strlen(match), "\n", dest, maxlen);
 	return 1;
     } else {
 	return 0;
@@ -321,24 +321,32 @@ httplib_parse_sc_header (const char *url
     }
 
     // read generic headers
-    extract_header_value(header, info->http_location, "Location:");
-    extract_header_value(header, info->server, "Server:");
-    rc = extract_header_value(header, info->icy_name, "icy-name:");
+    extract_header_value(header, info->http_location, "Location:",
+			 sizeof(info->http_location));
+    extract_header_value(header, info->server, "Server:",
+			 sizeof(info->server));
+    rc = extract_header_value(header, info->icy_name, "icy-name:",
+			      sizeof(info->icy_name));
     if (rc == 0) {
 	/* Icecast 2.0.1 */
-	rc = extract_header_value(header, info->icy_name, "ice-name:");
+	rc = extract_header_value(header, info->icy_name, "ice-name:",
+				  sizeof(info->icy_name));
     }
     info->have_icy_name = rc;
-    extract_header_value(header, info->icy_url, "icy-url:");
-    rc = extract_header_value(header, stempbr, "icy-br:");
+    extract_header_value(header, info->icy_url, "icy-url:",
+			 sizeof(info->icy_url));
+    rc = extract_header_value(header, stempbr,
+			      "icy-br:", sizeof(stempbr));
     if (rc) {
 	info->icy_bitrate = atoi(stempbr);
     }
 
     /* interpret the content type from http header */
-    rc = extract_header_value(header, stempbr, "Content-Type:");
+    rc = extract_header_value(header, stempbr,
+			      "Content-Type:", sizeof(stempbr));
     if (rc == 0) {
-        rc = extract_header_value(header, stempbr, "content-type:");
+        rc = extract_header_value(header, stempbr,
+				  "content-type:", sizeof(stempbr));
     }
     if (rc == 0) {
 	info->content_type = CONTENT_TYPE_UNKNOWN;
@@ -418,11 +426,15 @@ httplib_parse_sc_header (const char *url
 	}
 
 	// icecast 1.x headers.
-	extract_header_value(header, info->icy_url, "x-audiocast-server-url:");
-	rc = extract_header_value(header, info->icy_name, "x-audiocast-name:");
+	extract_header_value(header, info->icy_url, "x-audiocast-server-url:",
+			     sizeof(info->icy_url));
+	rc = extract_header_value(header, info->icy_name, "x-audiocast-name:",
+				  sizeof(info->icy_name));
 	info->have_icy_name |= rc;
-	extract_header_value(header, info->icy_genre, "x-audiocast-genre:");
-	rc = extract_header_value(header, stempbr, "x-audiocast-bitrate:");
+	extract_header_value(header, info->icy_genre, "x-audiocast-genre:",
+			     sizeof(info->icy_genre));
+	rc = extract_header_value(header, stempbr, "x-audiocast-bitrate:",
+				  sizeof(stempbr));
 	if (rc) {
 	    info->icy_bitrate = atoi(stempbr);
 	}
@@ -626,7 +638,8 @@ httplib_get_pls (HSOCKET *sock, SR_HTTP_
 	int best_open = 0;
 
 	sprintf (buf1, "File%d=", s);
-	if (!extract_header_value (buf, location_buf, buf1)) {
+	if (!extract_header_value (buf, location_buf, buf1,
+				   sizeof(location_buf))) {
 	    break;
 	}
 	if (s == 1) {
@@ -635,7 +648,7 @@ httplib_get_pls (HSOCKET *sock, SR_HTTP_
 	}
 	
 	sprintf (buf1, "Title%d=", s);
-	if (!extract_header_value (buf, title_buf, buf1)) {
+	if (!extract_header_value (buf, title_buf, buf1, sizeof(title_buf))) {
 	    break;
 	}
 	num_scanned = sscanf (title_buf, "(#%*[0-9] - %d/%d",&used,&total);
