File 0116-inets-fix-scheme-validation-in-http_uri-parse-when-b.patch of Package erlang

From 8df97eea992cf0fd3f1f1fc9f6bbc609949f1355 Mon Sep 17 00:00:00 2001
From: Luca Favatella <luca.favatella@erlang-solutions.com>
Date: Tue, 6 Mar 2018 14:01:12 +0000
Subject: [PATCH] inets: fix scheme validation in http_uri:parse when binary
 URI

---
 lib/inets/src/http_lib/http_uri.erl |  2 +-
 lib/inets/test/uri_SUITE.erl        | 21 +++++++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/lib/inets/src/http_lib/http_uri.erl b/lib/inets/src/http_lib/http_uri.erl
index d02913121c..bc588fd390 100644
--- a/lib/inets/src/http_lib/http_uri.erl
+++ b/lib/inets/src/http_lib/http_uri.erl
@@ -197,7 +197,7 @@ extract_scheme(Str, Opts) ->
 	{value, {scheme_validation_fun, Fun}} when is_function(Fun) ->
 	    case Fun(Str) of
 		valid ->
-		    {ok, list_to_atom(http_util:to_lower(Str))};
+		    {ok, to_atom(http_util:to_lower(Str))};
 		{error, Error} ->
 		    {error, Error}
 	    end;
diff --git a/lib/inets/test/uri_SUITE.erl b/lib/inets/test/uri_SUITE.erl
index f973296af6..8e00e6f565 100644
--- a/lib/inets/test/uri_SUITE.erl
+++ b/lib/inets/test/uri_SUITE.erl
@@ -52,6 +52,7 @@ all() ->
      escaped,
      hexed_query,
      scheme_validation,
+     scheme_validation_bin,
      encode_decode
     ].
 
@@ -273,6 +274,26 @@ scheme_validation(Config) when is_list(Config) ->
 	http_uri:parse("https://localhost#fragment",
 		       [{scheme_validation_fun, none}]).
 
+scheme_validation_bin(Config) when is_list(Config) ->
+    {ok, {http,<<>>,<<"localhost">>,80,<<"/">>,<<>>}} =
+        http_uri:parse(<<"http://localhost#fragment">>),
+
+    ValidationFun =
+        fun(<<"http">>) -> valid;
+           (_) -> {error, bad_scheme}
+        end,
+
+    {ok, {http,<<>>,<<"localhost">>,80,<<"/">>,<<>>}} =
+        http_uri:parse(<<"http://localhost#fragment">>,
+                       [{scheme_validation_fun, ValidationFun}]),
+    {error, bad_scheme} =
+        http_uri:parse(<<"https://localhost#fragment">>,
+                       [{scheme_validation_fun, ValidationFun}]),
+    %% non-fun scheme_validation_fun works as no option passed
+    {ok, {https,<<>>,<<"localhost">>,443,<<"/">>,<<>>}} =
+        http_uri:parse(<<"https://localhost#fragment">>,
+                       [{scheme_validation_fun, none}]).
+
 encode_decode(Config) when is_list(Config) ->
     ?assertEqual("foo%20bar", http_uri:encode("foo bar")),
     ?assertEqual(<<"foo%20bar">>, http_uri:encode(<<"foo bar">>)),
-- 
2.16.3