Dialyzer HttpPacket Waring (bug?)

Edmond Begumisa ebegumisa@REDACTED
Mon Feb 28 21:10:44 CET 2011


Hello all,

I'm using erlang:decode_packet/3 to do some HTTP. When I use the http_bin  
packet type and match the result, Dialyzer keeps warning about my  
HttpString type being invalid indicating that it's expecting a string()  
and not my binary(). Yet the documentation says (and tracing confirms)  
that HttpString = string() | binary()

For example...

case erlang:decode_packet(http_bin, Bin, []) of
    {ok, {http_error, <<"\r\n">>}, Rest} ->
      ..
end.

Produces the warning..

The pattern {'ok', {'http_error',  
<<13:8/integer-unit:1,10:8/integer-unit:1>>}, Rest} can never match the  
type {'error',_} | {'more','undefined' | non_neg_integer()} |  
{'ok','http_eoh' | binary() | maybe_improper_list(binary() |  
maybe_improper_list(any(),binary() | []) | byte(),binary() | []) |  
{'http_error',string()} | {'http_request','DELETE' | 'GET' | 'HEAD' |  
'OPTIONS' | 'POST' | 'PUT' | 'TRACE' | string(),'*' | string() |  
{'abs_path',string()} | {'scheme',string(),string()} |  
{'absoluteURI','http' | 'https',string(),'undefined' |  
non_neg_integer(),string()},{non_neg_integer(),non_neg_integer()}} |  
{'http_response',{non_neg_integer(),non_neg_integer()},integer(),string()}  
| {'http_header',integer(),atom() | string(),_,string()},binary()}

I get the same warnings for matching other results containing the  
HTTPString type (http_body, http_header, etc)

If I change http_bin to http in that call to decode_packet, everything is  
fine. But I'm using binaries with bit-syntax everywhere and would prefer  
not to decode lists. I can't simply ignore the warnings either because  
they permeate to other functions and other applications using my library  
(making it impossible to Dialyze other modules/apps that use this module).

Is this a bug in the spec definitions for decode_packet? Where does  
Dialyzer even get those since decode_packet is in the erlang module?
Is there a way to get Dialyzer to ignore particular lines in particular  
files? I can't use the "-Wno_match" switch coz it affects either all  
modules or none in the case where you're merging plt files as I do.

- Edmond -

-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/


More information about the erlang-questions mailing list