@@ -318,24 +318,33 @@ address_to_bin({A,B,C,D,E,F,G,H}, Port) ->
318318 <<A :16 ,B :16 ,C :16 ,D :16 ,E :16 ,F :16 ,G :16 ,H :16 ,Port :16 >>.
319319
320320% %--------------------------------------------------------------------
321-
322321handle_fragments (Version , FragmentData , Buffers0 , Options , Acc ) ->
323- Fragments = decode_handshake_fragments (FragmentData ),
324- do_handle_fragments (Version , Fragments , Buffers0 , Options , Acc ).
322+ try decode_handshake_fragments (FragmentData ) of
323+ Fragments ->
324+ do_handle_fragments (Version , Fragments , Buffers0 , Options , Acc )
325+ catch
326+ error :_Reason ->
327+ throw (? ALERT_REC (? FATAL , ? DECODE_ERROR , malformed_handshake_fragment ))
328+ end .
325329
326330do_handle_fragments (_ , [], Buffers , _Options , Acc ) ->
327331 {lists :reverse (Acc ), Buffers };
328- do_handle_fragments (Version , [Fragment | Fragments ], Buffers0 , #{log_level := LogLevel } = Options , Acc ) ->
329- case reassemble (Version , Fragment , Buffers0 ) of
330- {more_data , Buffers } when Fragments == [] ->
331- {lists :reverse (Acc ), Buffers };
332- {more_data , Buffers } ->
333- do_handle_fragments (Version , Fragments , Buffers , Options , Acc );
334- {{Handshake , _ } = HsPacket , Buffers } ->
332+ do_handle_fragments (Version , [Fragment | Fragments ], Buffers0 ,
333+ #{log_level := LogLevel } = Options , Acc ) ->
334+ try reassemble (Version , Fragment , Buffers0 ) of
335+ {more_data , Buffers } when Fragments == [] ->
336+ {lists :reverse (Acc ), Buffers };
337+ {more_data , Buffers } ->
338+ do_handle_fragments (Version , Fragments , Buffers , Options , Acc );
339+ {{Handshake , _ } = HsPacket , Buffers } ->
335340 ssl_logger :debug (LogLevel , inbound , 'handshake' , Handshake ),
336- do_handle_fragments (Version , Fragments , Buffers , Options , [HsPacket | Acc ])
341+ do_handle_fragments (Version , Fragments , Buffers , Options , [HsPacket | Acc ])
342+ catch
343+ error :_Reason ->
344+ throw (? ALERT_REC (? FATAL , ? DECODE_ERROR , malformed_handshake_fragment ))
337345 end .
338346
347+
339348decode_handshake (Version , <<? BYTE (Type ), Bin /binary >>) ->
340349 decode_handshake (Version , Type , Bin ).
341350
@@ -379,7 +388,7 @@ decode_tls_handshake(Version, Tag, Msg) ->
379388 ssl_handshake :decode_handshake (TLSVersion , Tag , Msg ).
380389
381390decode_handshake_fragments (<<>>) ->
382- [<<>> ];
391+ [];
383392decode_handshake_fragments (<<? BYTE (Type ), ? UINT24 (Length ),
384393 ? UINT16 (MessageSeq ),
385394 ? UINT24 (FragmentOffset ), ? UINT24 (FragmentLength ),
0 commit comments