Merge bug24012 into default rabbitmq_v2_4_1
authorRob Harrop <rob@rabbitmq.com>
Tue Apr 05 11:13:04 2011 +0100 (13 months ago)
changeset 431fe877493f8bc
parent 429 eddca1626b6c
parent 430 a702d0e592f9
child 432 32382fb8257c
child 433 6f8ef9bbf76e
Merge bug24012 into default
     1.1 --- a/src/rabbit_stomp_frame.erl	Fri Apr 01 16:05:02 2011 +0100
     1.2 +++ b/src/rabbit_stomp_frame.erl	Tue Apr 05 11:13:04 2011 +0100
     1.3 @@ -118,18 +118,17 @@
     1.4      end.
     1.5  
     1.6  parse_body(Content, Frame, Chunks, unknown) ->
     1.7 -    case binary:split(Content, <<0>>) of
     1.8 -        [Content] ->
     1.9 -            more(fun(Rest) ->
    1.10 -                         parse_body(Rest,
    1.11 -                                    Frame,
    1.12 -                                    finalize_chunk(Content, Chunks),
    1.13 -                                    unknown)
    1.14 -                 end);
    1.15 -        [Chunk, Rest] ->
    1.16 -            {ok, Frame#stomp_frame{
    1.17 -                   body_iolist = lists:reverse(
    1.18 -                                   finalize_chunk(Chunk, Chunks))}, Rest}
    1.19 +    case firstnull(Content) of
    1.20 +        -1  -> more(fun(Rest) ->
    1.21 +                            parse_body(Rest,
    1.22 +                                       Frame,
    1.23 +                                       finalize_chunk(Content, Chunks),
    1.24 +                                       unknown)
    1.25 +                    end);
    1.26 +        Pos -> <<Chunk:Pos/binary, 0, Rest/binary>> = Content,
    1.27 +               {ok, Frame#stomp_frame{
    1.28 +                      body_iolist = lists:reverse(
    1.29 +                                      finalize_chunk(Chunk, Chunks))}, Rest}
    1.30      end;
    1.31  parse_body(Content, Frame, Chunks, Remaining) ->
    1.32      Size = byte_size(Content),
    1.33 @@ -235,3 +234,9 @@
    1.34  escape($\\) -> "\\\\";
    1.35  escape($\n) -> "\\n";
    1.36  escape(C)   -> C.
    1.37 +
    1.38 +firstnull(Content) -> firstnull(Content, 0).
    1.39 +
    1.40 +firstnull(<<>>,                _N) -> -1;
    1.41 +firstnull(<<0,  _Rest/binary>>, N) -> N;
    1.42 +firstnull(<<_Ch, Rest/binary>>, N) -> firstnull(Rest, N+1).