Improved BASE64 to update has_error when decoding.

Added manual tests.
This commit is contained in:
2014-04-09 16:56:40 +02:00
parent a4c1263190
commit 6e27f66306
2 changed files with 42 additions and 4 deletions

View File

@@ -125,17 +125,17 @@ feature -- Decoder
byte_count := 0 byte_count := 0
pos := next_encoded_character_position (v, pos) pos := next_encoded_character_position (v, pos)
if pos <= n then if pos < n then
byte1 := base64chars.index_of (v[pos], 1) - 1 byte1 := base64chars.index_of (v[pos], 1) - 1
byte_count := byte_count + 1 byte_count := byte_count + 1
pos := next_encoded_character_position (v, pos) pos := next_encoded_character_position (v, pos)
if pos <= n then if pos < n then
byte2 := base64chars.index_of (v[pos], 1) - 1 byte2 := base64chars.index_of (v[pos], 1) - 1
byte_count := byte_count + 1 byte_count := byte_count + 1
pos := next_encoded_character_position (v, pos) pos := next_encoded_character_position (v, pos)
if pos <= n then if pos < n then
c := v[pos] c := v[pos]
if c /= '=' then if c /= '=' then
byte3 := base64chars.index_of (c, 1) - 1 byte3 := base64chars.index_of (c, 1) - 1
@@ -150,8 +150,14 @@ feature -- Decoder
byte_count := byte_count + 1 byte_count := byte_count + 1
end end
end end
else
has_error := True
end end
else
has_error := True
end end
else
has_error := True
end end
-- pos := pos + byte_count -- pos := pos + byte_count
@@ -293,7 +299,7 @@ feature {NONE} -- Constants
character_map: STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" character_map: STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
note note
copyright: "Copyright (c) 1984-2011, Eiffel Software and others" copyright: "Copyright (c) 2011-2014, Eiffel Software and others"
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
source: "[ source: "[
Eiffel Software Eiffel Software

View File

@@ -34,6 +34,38 @@ feature -- Test routines
assert ("decoded encoded string is same", u ~ s) assert ("decoded encoded string is same", u ~ s)
end end
feature -- Tests
test_valid_64_encoding
do
assert ("Expected encoded True:", is_valid_base64_encoding ((create {BASE64}).encoded_string ("content")))
end
test_not_valid64_encoding
do
assert ("Expected encoded False:", not is_valid_base64_encoding ("content"))
assert ("Expected encoded False:", not is_valid_base64_encoding ("!@#$%%^"))
end
feature {NONE} -- Implementation
is_valid_base64_encoding (a_string: STRING): BOOLEAN
-- is `a_string' base64 encoded?
local
l_encoder: BASE64
l_string: STRING
l_retry: BOOLEAN
do
if not l_retry then
create l_encoder
l_string := l_encoder.decoded_string (a_string)
Result := not l_encoder.has_error
end
rescue
l_retry := True
retry
end
note note
copyright: "Copyright (c) 1984-2011, Eiffel Software and others" copyright: "Copyright (c) 1984-2011, Eiffel Software and others"
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"