Improved BASE64 to update has_error when decoding.
Added manual tests.
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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)"
|
||||||
|
|||||||
Reference in New Issue
Block a user