Do something simple to defend against non-UTF-8 headers. This is not round-trippable, but hopefully people doing binary headers are quite rare.
This commit is contained in:
		
							parent
							
								
									1d2a565714
								
							
						
					
					
						commit
						f11a34884f
					
				| 
						 | 
				
			
			@ -77,9 +77,19 @@ amqp_table(undefined) -> amqp_table([]);
 | 
			
		|||
amqp_table(Table)     -> {struct, [{Name, amqp_value(Type, Value)} ||
 | 
			
		||||
                                      {Name, Type, Value} <- Table]}.
 | 
			
		||||
 | 
			
		||||
amqp_value(array, Val) -> [amqp_value(T, V) || {T, V} <- Val];
 | 
			
		||||
amqp_value(table, Val) -> amqp_table(Val);
 | 
			
		||||
amqp_value(_Type, Val) -> Val.
 | 
			
		||||
amqp_value(array, Vs)                  -> [amqp_value(T, V) || {T, V} <- Vs];
 | 
			
		||||
amqp_value(table, V)                   -> amqp_table(V);
 | 
			
		||||
amqp_value(_Type, V) when is_binary(V) -> utf8_safe(V);
 | 
			
		||||
amqp_value(_Type, V)                   -> V.
 | 
			
		||||
 | 
			
		||||
utf8_safe(V) ->
 | 
			
		||||
    try
 | 
			
		||||
        xmerl_ucs:from_utf8(V),
 | 
			
		||||
        V
 | 
			
		||||
    catch exit:{ucs, _} ->
 | 
			
		||||
            Enc = base64:encode(V),
 | 
			
		||||
            <<"Invalid UTF-8, base64 is: ", Enc/binary>>
 | 
			
		||||
    end.
 | 
			
		||||
 | 
			
		||||
tuple(unknown)                    -> unknown;
 | 
			
		||||
tuple(Tuple) when is_tuple(Tuple) -> [tuple(E) || E <- tuple_to_list(Tuple)];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue