aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/encoding/base32/base32.odin14
-rw-r--r--tests/core/encoding/base32/base32.odin14
2 files changed, 18 insertions, 10 deletions
diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin
index 34de2ff53..d272b32b8 100644
--- a/core/encoding/base32/base32.odin
+++ b/core/encoding/base32/base32.odin
@@ -153,15 +153,15 @@ decode :: proc(
padding_count += 1
}
- // Check for proper padding and length combinations
- if padding_count > 0 {
- // Verify no padding in the middle
- for i := 0; i < data_len - padding_count; i += 1 {
- if data[i] == byte(PADDING) {
- return nil, .Malformed_Input
- }
+ // Verify no padding in the middle
+ for i := 0; i < data_len - padding_count; i += 1 {
+ if data[i] == byte(PADDING) {
+ return nil, .Malformed_Input
}
+ }
+ // Check for proper padding and length combinations
+ if padding_count > 0 {
content_len := data_len - padding_count
mod8 := content_len % 8
required_padding: int
diff --git a/tests/core/encoding/base32/base32.odin b/tests/core/encoding/base32/base32.odin
index f757e99e5..2abb244ca 100644
--- a/tests/core/encoding/base32/base32.odin
+++ b/tests/core/encoding/base32/base32.odin
@@ -1,4 +1,3 @@
-#+test
package test_encoding_base32
import "core:testing"
@@ -83,7 +82,16 @@ test_base32_decode_invalid :: proc(t: ^testing.T) {
// Section 3.2 - Padding requirements
{
- // Padding must only be at end
+ // Padding in middle without trailing padding
+ input := "MZ===YTBMZXW6YTB" // '===' in middle, no trailing padding
+ output, err := base32.decode(input)
+ if output != nil {
+ defer delete(output)
+ }
+ testing.expect_value(t, err, Error.Malformed_Input)
+ }
+ {
+ // Padding must only be at end (with trailing padding)
input := "MZ=Q===="
output, err := base32.decode(input)
if output != nil {
@@ -228,4 +236,4 @@ test_base32_custom_alphabet :: proc(t: ^testing.T) {
}
testing.expect_value(t, err, Error.Invalid_Character)
}
-} \ No newline at end of file
+}