Skip to content

Commit

Permalink
Merge pull request #351 from ysugimoto/fix/base64-decode-builtin-func…
Browse files Browse the repository at this point in the history
…tions

Fix tiny bug of base64 decode functions
  • Loading branch information
ysugimoto authored Sep 26, 2024
2 parents fd3ffe0 + eb0c09f commit 6fab718
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 3 deletions.
6 changes: 6 additions & 0 deletions cmd/falco/runner_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,12 @@ func TestTester(t *testing.T) {
filter: "*override_variables.test.vcl",
passes: 6,
},
{
name: "base64 functional test",
main: "../../examples/testing/base64/main.vcl",
filter: "*base64.test.vcl",
passes: 12,
},
}

for _, tt := range tests {
Expand Down
66 changes: 66 additions & 0 deletions examples/testing/base64/base64.test.vcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
// https://fiddle.fastly.dev/fiddle/a3b006c4

// @scope: recv
// @suite: Test base64 decode
sub test_base64_decode_recv {
declare local var.input STRING;
declare local var.decoded STRING;

set var.input = "aGVsbG8=0";

set var.decoded = digest.base64_decode(var.input);
assert.equal(std.strlen(var.decoded), 5);
assert.equal(var.decoded, "hello");

set var.decoded = digest.base64url_decode(var.input);
assert.equal(std.strlen(var.decoded), 5);
assert.equal(var.decoded, "hello");

set var.decoded = digest.base64url_nopad_decode(var.input);
assert.equal(std.strlen(var.decoded), 6);
assert.equal(var.decoded, "hello4");
}

// @scope: recv
// @suite: Test base64 decode NULL string
sub test_base64_decode_recv {
declare local var.input STRING;
declare local var.decoded STRING;

set var.input = "c29tZSBkYXRhIHdpdGggACBhbmQg77u/";

set var.decoded = digest.base64_decode(var.input);
assert.equal(std.strlen(var.decoded), 15);
assert.equal(var.decoded, "some data with ");

set var.decoded = digest.base64url_decode(var.input);
assert.equal(std.strlen(var.decoded), 15);
assert.equal(var.decoded, "some data with ");

set var.decoded = digest.base64url_nopad_decode(var.input);
assert.equal(std.strlen(var.decoded), 15);
assert.equal(var.decoded, "some data with ");
}

// @scope: recv
// @suite: Test base64 decode BOM string
sub test_base64_decode_recv {
// Skip tests because we suspects Fastly has a tiny bug in base64 decoding with BOM
declare local var.input STRING;
declare local var.decoded STRING;

set var.input = "c29tZSBkYXRhIHdpdGgg77u/IGFuZCAA";

// set var.decoded = digest.base64_decode(var.input);
// assert.equal(std.strlen(var.decoded), 23);
# assert.equal(var.decoded, "some data with \xef\xbb\xbf and");

// set var.decoded = digest.base64url_decode(var.input);
// assert.equal(std.strlen(var.decoded), 22);
# assert.equal(var.decoded, "some data with ﻈ[�");

// set var.decoded = digest.base64url_nopad_decode(var.input);
// assert.equal(std.strlen(var.decoded), 22);
# assert.equal(var.decoded, "some data with ﻈ[�");
}

5 changes: 5 additions & 0 deletions examples/testing/base64/main.vcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# https://fiddle.fastly.dev/fiddle/6a433b2e

backend default_0 {
.host = "example.com";
}
2 changes: 1 addition & 1 deletion interpreter/function/builtin/digest_base64_decode.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion interpreter/function/builtin/digest_base64url_decode.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 6fab718

Please sign in to comment.