shithub: sox

Download patch

ref: 0519583288057272ec626e6ad391be44a75574d9
parent: de8669fdb9b0e819ff75ddb1adb761e0e3cd9b41
author: robs <robs>
date: Mon Oct 27 03:15:23 EDT 2008

Fix [2026912] Fails on URL-like filenames

--- a/ChangeLog
+++ b/ChangeLog
@@ -98,6 +98,7 @@
   o Fix memory leaks in effects chain when restarting effects. (cbagwell)
   o Fixed pkg-config CFLAGS. (evilynux)
   o Fix sndfile inclusion in build in some circumstances.  (robs)
+  o Fix [2026912] Fails on URL-like filenames.  (robs)
 
 Internal improvements:
 
--- a/src/formats.c
+++ b/src/formats.c
@@ -318,17 +318,12 @@
   return SOX_SUCCESS;
 }
 
-static sox_bool is_uri(char const * text)
+static sox_bool is_url(char const * text) /* detects only wget-supported URLs */
 {
-  if (!isalpha((int)*text))
-    return sox_false;
-  ++text;
-  do {
-    if (!isalnum((int)*text) && !strchr("+-.", *text))
-      return sox_false;
-    ++text;
-  } while (*text && *text != ':');
-  return *text == ':';
+  return !(
+      strncasecmp(text, "http:" , 5) &&
+      strncasecmp(text, "https:", 6) &&
+      strncasecmp(text, "ftp:"  , 4));
 }
 
 static int xfclose(FILE * file, lsx_io_type io_type)
@@ -354,7 +349,7 @@
 #endif
     return f;
   }
-  else if (is_uri(identifier)) {
+  else if (is_url(identifier)) {
     FILE * f = NULL;
 #ifdef HAVE_POPEN
     char const * const command_format = "wget --no-check-certificate -q -O- \"%s\"";
@@ -452,7 +447,7 @@
         lsx_report("assuming input pipe `%s' has file-type `sox'", path);
       }
       else if (!(filetype = lsx_find_file_extension(path))) {
-        lsx_fail("can't determine type of `%s'", path);
+        lsx_fail("can't determine type of %s `%s'", type, path);
         goto error;
       }
       if (!(handler = sox_find_format(filetype, sox_true))) {
@@ -934,7 +929,7 @@
       if (begin != end) {
         char const * id = text + begin;
 
-        if (!dirname[0] || is_uri(id) || IS_ABSOLUTE(id))
+        if (!dirname[0] || is_url(id) || IS_ABSOLUTE(id))
           filename = lsx_strdup(id);
         else {
           filename = lsx_malloc(strlen(dirname) + strlen(id) + 2);