File 2360-stdlib-Do-not-check-base64-input-more-than-needed.patch of Package erlang

From 2ead5d429fe87ffedf0134d918c3b404e9fa70fe Mon Sep 17 00:00:00 2001
From: Hans Bolinder <hasse@erlang.org>
Date: Wed, 8 Nov 2017 12:41:23 +0100
Subject: [PATCH 4/5] stdlib: Do not check base64 input more than needed

Often the decode functions return a function_clause error, but not
always, and the errors have not been consistent between modifications
of the base64 module.

Now the errors are returned as they happen--no attempt to make them
look nice is done. The alternative, to ensure that, for example,
{badarg, Culprit} is always returned upon bad input, was deemed
pointless.
---
 lib/stdlib/src/base64.erl        |  6 ++----
 lib/stdlib/test/base64_SUITE.erl | 13 +++++++++----
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/lib/stdlib/src/base64.erl b/lib/stdlib/src/base64.erl
index b4ff7b037f..6ea4147abf 100644
--- a/lib/stdlib/src/base64.erl
+++ b/lib/stdlib/src/base64.erl
@@ -383,8 +383,7 @@ only_ws_binary(<<>>, A) ->
     A;
 only_ws_binary(<<C:8, Cs/bits>>, A) ->
     case b64d(C) of
-        ws -> only_ws_binary(Cs, A);
-        _ -> erlang:error(function_clause)
+        ws -> only_ws_binary(Cs, A)
     end.
 
 decode_list_to_string([C1 | Cs]) ->
@@ -427,8 +426,7 @@ only_ws([], A) ->
     A;
 only_ws([C | Cs], A) ->
     case b64d(C) of
-        ws -> only_ws(Cs, A);
-        _ -> erlang:error(function_clause)
+        ws -> only_ws(Cs, A)
     end.
 
 %%%========================================================================
diff --git a/lib/stdlib/test/base64_SUITE.erl b/lib/stdlib/test/base64_SUITE.erl
index 1715b2ebe6..1fc4c3fc0e 100644
--- a/lib/stdlib/test/base64_SUITE.erl
+++ b/lib/stdlib/test/base64_SUITE.erl
@@ -97,10 +97,9 @@ base64_otp_5635(Config) when is_list(Config) ->
     <<"===">> = base64:decode(base64:encode("===")),
     ok.
 %%-------------------------------------------------------------------------
-%% OTP-6279: Guard needed so that function fails in a correct
-%% way for faulty input, i.e. function_clause.
+%% OTP-6279: Make sure illegal characters are rejected when decoding.
 base64_otp_6279(Config) when is_list(Config) ->
-    {'EXIT',{function_clause, _}} = (catch base64:decode("dGVzda==a")),
+    {'EXIT',_} = (catch base64:decode("dGVzda==a")),
     ok.
 %%-------------------------------------------------------------------------
 %% Encode and decode big binaries.
@@ -115,7 +114,13 @@ big(Config) when is_list(Config) ->
 %%-------------------------------------------------------------------------
 %% Make sure illegal characters are rejected when decoding.
 illegal(Config) when is_list(Config) ->
-    {'EXIT',{function_clause, _}} = (catch base64:decode("()")),
+    %% A few samples with different error reasons. Nothing can be
+    %% assumed about the reason for the crash.
+    {'EXIT',_} = (catch base64:decode("()")),
+    {'EXIT',_} = (catch base64:decode(<<19:8,20:8,21:8,22:8>>)),
+    {'EXIT',_} = (catch base64:decode([19,20,21,22])),
+    {'EXIT',_} = (catch base64:decode_to_string(<<19:8,20:8,21:8,22:8>>)),
+    {'EXIT',_} = (catch base64:decode_to_string([19,20,21,22])),
     ok.
 %%-------------------------------------------------------------------------
 %% mime_decode and mime_decode_to_string have different implementations
-- 
2.15.1

openSUSE Build Service is sponsored by