@@ -230,25 +230,28 @@ defmodule URI do
230
230
231
231
"""
232
232
def decode ( uri ) do
233
- decode ( uri , uri )
233
+ unpercent ( uri )
234
+ catch
235
+ :malformed_uri ->
236
+ raise ArgumentError , "malformed URI #{ inspect uri } "
234
237
end
235
238
236
- def decode ( << ?% , hex1 , hex2 , tail :: binary >> , uri ) do
237
- << bsl ( hex_to_dec ( hex1 , uri ) , 4 ) + hex_to_dec ( hex2 , uri ) >> <> decode ( tail , uri )
239
+ defp unpercent ( << ?% , hex_1 , hex_2 , tail :: binary >> ) do
240
+ << bsl ( hex_to_dec ( hex_1 ) , 4 ) + hex_to_dec ( hex_2 ) >> <> unpercent ( tail )
238
241
end
242
+ defp unpercent ( << ?% , _ >> ) , do: throw ( :malformed_uri )
243
+ defp unpercent ( << ?% >> ) , do: throw ( :malformed_uri )
239
244
240
- def decode ( << head , tail :: binary >> , uri ) do
241
- << head >> <> decode ( tail , uri )
245
+ defp unpercent ( << head , tail :: binary >> ) do
246
+ << head >> <> unpercent ( tail )
242
247
end
243
248
244
- def decode ( << >> , _uri ) , do: << >>
249
+ defp unpercent ( << >> ) , do: << >>
245
250
246
- defp hex_to_dec ( n , _uri ) when n in ?A .. ?F , do: n - ?A + 10
247
- defp hex_to_dec ( n , _uri ) when n in ?a .. ?f , do: n - ?a + 10
248
- defp hex_to_dec ( n , _uri ) when n in ?0 .. ?9 , do: n - ?0
249
- defp hex_to_dec ( _n , uri ) do
250
- raise ArgumentError , "malformed URI #{ inspect uri } "
251
- end
251
+ defp hex_to_dec ( n ) when n in ?A .. ?F , do: n - ?A + 10
252
+ defp hex_to_dec ( n ) when n in ?a .. ?f , do: n - ?a + 10
253
+ defp hex_to_dec ( n ) when n in ?0 .. ?9 , do: n - ?0
254
+ defp hex_to_dec ( _n ) , do: throw ( :malformed_uri )
252
255
253
256
@ doc """
254
257
Parses a URI into components.
0 commit comments