From 67c44bcf6289e4b926a2c4e3e1a51016952dc9be Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 8 Jun 2017 21:02:13 -0500 Subject: [PATCH] base64: Fix base64 for strings that don't end in equal signs. Some uses of base64 in the wild do not have trailing ==, such as JWT (JSON Web Token) strings. --- basis/base64/base64-tests.factor | 17 ++++++++++++++++- basis/base64/base64.factor | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/basis/base64/base64-tests.factor b/basis/base64/base64-tests.factor index 4e7e887ceb..d708c1b3d3 100644 --- a/basis/base64/base64-tests.factor +++ b/basis/base64/base64-tests.factor @@ -1,5 +1,5 @@ USING: base64 io.encodings.ascii io.encodings.string kernel -sequences strings tools.test ; +sequences splitting strings tools.test ; { "abcdefghijklmnopqrstuvwxyz" } [ "abcdefghijklmnopqrstuvwxyz" ascii encode >base64 base64> ascii decode ] unit-test @@ -24,3 +24,18 @@ sequences strings tools.test ; [ { 33 52 17 40 12 51 33 43 18 33 23 } base64> ] [ malformed-base64? ] must-fail-with + +{ + { + B{ 123 34 97 108 103 34 58 34 72 83 50 53 54 34 125 } + B{ 123 34 115 117 98 34 58 34 74 111 101 34 125 } + B{ + 138 151 175 68 219 145 63 161 223 148 111 28 20 169 230 + 80 251 114 166 187 145 11 135 219 212 53 173 160 178 250 + 217 38 + } + } +} [ + "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJKb2UifQ.ipevRNuRP6HflG8cFKnmUPtypruRC4fb1DWtoLL62SY" + "." split [ base64> ] map +] unit-test \ No newline at end of file diff --git a/basis/base64/base64.factor b/basis/base64/base64.factor index 500784ef7f..717a9e0d06 100644 --- a/basis/base64/base64.factor +++ b/basis/base64/base64.factor @@ -84,7 +84,7 @@ PRIVATE> 4 "\n\r" pick read-ignoring dup length { { 0 [ 2drop ] } { 4 [ decode4 (decode-base64) ] } - [ malformed-base64 ] + [ drop 4 CHAR: = pad-tail decode4 (decode-base64) ] } case ; PRIVATE> -- 2.34.1