From 33d8b23dfd9bbcfd247908d948a22a9783fc060b Mon Sep 17 00:00:00 2001
From: Steven Schubiger <stsc@member.fsf.org>
Date: Tue, 2 Mar 2010 21:41:32 +0100
Subject: [PATCH] Check stricter for supported URL scheme.

---
 src/ChangeLog | 9 +++++++++
 src/retr.c    | 2 +-
 src/url.c     | 7 +++++++
 src/url.h     | 1 +
 4 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/ChangeLog b/src/ChangeLog
index 0ee92fdc..216a8102 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,12 @@
+2010-03-02  Steven Schubiger  <stsc@member.fsf.org>
+
+	* retr.c (retrieve_from_file): Improve checking for a URL
+	by invoking url_valid_scheme instead of url_has_scheme.
+
+	* url.c (url_valid_scheme): New function.
+
+	* url.h: Add declaration for url_valid_scheme.
+
 2010-03-02  Steven Schubiger  <stsc@member.fsf.org>
 
 	* retr.c (retrieve_from_file): Free memory of input file.
diff --git a/src/retr.c b/src/retr.c
index 55d5be78..74b9dccb 100644
--- a/src/retr.c
+++ b/src/retr.c
@@ -899,7 +899,7 @@ retrieve_from_file (const char *file, bool html, int *count)
   set_uri_encoding (iri, opt.locale, true);
   set_content_encoding (iri, opt.locale);
 
-  if (url_has_scheme (url))
+  if (url_valid_scheme (url))
     {
       int dt,url_err;
       uerr_t status;
diff --git a/src/url.c b/src/url.c
index d0b94a98..ffc62a7e 100644
--- a/src/url.c
+++ b/src/url.c
@@ -463,6 +463,13 @@ url_has_scheme (const char *url)
   return *p == ':';
 }
 
+bool
+url_valid_scheme (const char *url)
+{
+  enum url_scheme scheme = url_scheme (url);
+  return scheme != SCHEME_INVALID;
+}
+
 int
 scheme_default_port (enum url_scheme scheme)
 {
diff --git a/src/url.h b/src/url.h
index 278b71dd..0c0d87a3 100644
--- a/src/url.h
+++ b/src/url.h
@@ -94,6 +94,7 @@ void url_free (struct url *);
 
 enum url_scheme url_scheme (const char *);
 bool url_has_scheme (const char *);
+bool url_valid_scheme (const char *);
 int scheme_default_port (enum url_scheme);
 void scheme_disable (enum url_scheme);