« Return to Thread: base64:decode trailing whitespace patch for otp_src_R13B/lib/stdlib/src/base64.erl

base64:decode trailing whitespace patch for otp_src_R13B/lib/stdlib/src/base64.erl

by Christopher Stelma :: Rate this Message:

Reply to Author | View in Thread

Trailing whitespace (after "=") is stripped, but the return value from
base64:strip_spaces is not in the same format expected by
base64:decode.

example of the problem:

------------------------------
----------------------------------------
3> base64:decode("cXV1eA==").
<<"quux">>
4> base64:decode("cXV1eA==\n").
** exception error: no function clause matching base64:decode([61,"=Ae1VXc"],

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,

-1,-1,-1,-1,-1,-1,-1,-1,...},
                                                              [])
    in function  base64:decode/1
----------------------------------------------------------------------

more specifically to the internal api:
----------------------------------------------------------------------
7> base64:strip_spaces("foo==\n", []).
[61,"=oof"]
8> base64:strip_spaces("foo==", []).
"==oof"
----------------------------------------------------------------------

patch attached.


--
Christopher Stelma
chris@...

[base64fix.diff]

--- otp_src_R13B/lib/stdlib/src/base64.erl 2009-03-12 08:21:37.000000000 -0400
+++ otp_src_R13B-base64fix/lib/stdlib/src/base64.erl 2009-04-17 12:46:12.000000000 -0400
@@ -189,7 +189,7 @@
 %%%========================================================================
 
 strip_spaces([], A) -> A;
-strip_spaces([$=,C|_], A) when C =/= $= -> [$=, A];
+strip_spaces([$=,C|_], A) when C =/= $= -> [$= | A];
 strip_spaces([$\s|Cs], A) -> strip_spaces(Cs, A);
 strip_spaces([$\t|Cs], A) -> strip_spaces(Cs, A);
 strip_spaces([$\r|Cs], A) -> strip_spaces(Cs, A);


_______________________________________________
erlang-patches mailing list
erlang-patches@...
http://www.erlang.org/mailman/listinfo/erlang-patches

 « Return to Thread: base64:decode trailing whitespace patch for otp_src_R13B/lib/stdlib/src/base64.erl