diff options
author | Erlang/OTP <otp@erlang.org> | 2019-11-14 14:56:57 +0100 |
---|---|---|
committer | Erlang/OTP <otp@erlang.org> | 2019-11-14 14:56:57 +0100 |
commit | a7963abaefb9d19e1a293db3e7d02bd6464c2b16 (patch) | |
tree | c9e8a9fcdcad1006abae09e5fb18b19db13251b8 | |
parent | d0389a71bf302e2fd9487c1328ec0a5f33169639 (diff) | |
parent | 78b734e8cee09d58037a9ceeed7a6ecef90da885 (diff) | |
download | erlang-a7963abaefb9d19e1a293db3e7d02bd6464c2b16.tar.gz |
Merge branch 'hans/ftp/richcarl_loop_fix/PR-2436/OTP-16243' into maint-21
* hans/ftp/richcarl_loop_fix/PR-2436/OTP-16243:
ftp: improve fix to infinite loop
ftp: Fix infinite ctrl_data loop
-rw-r--r-- | lib/ftp/src/ftp.erl | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/lib/ftp/src/ftp.erl b/lib/ftp/src/ftp.erl index e9be7b8ff7..2f7a67df67 100644 --- a/lib/ftp/src/ftp.erl +++ b/lib/ftp/src/ftp.erl @@ -1375,11 +1375,11 @@ handle_info({Transport, Socket, Data}, #state{csock = {Transport, Socket}, verbose = Verbose, caller = Caller, client = From, - ctrl_data = {CtrlData, AccLines, + ctrl_data = {BinCtrlData, AccLines, LineStatus}} = State0) -> - ?DBG('--ctrl ~p ----> ~s~p~n',[Socket,<<CtrlData/binary, Data/binary>>,State]), - case ftp_response:parse_lines(<<CtrlData/binary, Data/binary>>, + ?DBG('--ctrl ~p ----> ~s~p~n',[Socket,<<BinCtrlData/binary, Data/binary>>,State]), + case ftp_response:parse_lines(<<BinCtrlData/binary, Data/binary>>, AccLines, LineStatus) of {ok, Lines, NextMsgData} -> verbose(Lines, Verbose, 'receive'), @@ -1399,12 +1399,13 @@ handle_info({Transport, Socket, Data}, #state{csock = {Transport, Socket}, ctrl_data = {NextMsgData, [], start}}) end; - {continue, NewCtrlData} when NewCtrlData =/= CtrlData -> - ?DBG(' ...Continue... ctrl_data=~p~n',[NewCtrlData]), - State = activate_ctrl_connection(State0), - {noreply, State#state{ctrl_data = NewCtrlData}}; - {continue, NewCtrlData} when NewCtrlData == CtrlData -> - ?DBG(' ...Continue... ctrl_data=~p~n',[NewCtrlData]), + {continue, CtrlData} when CtrlData =/= State0#state.ctrl_data -> + ?DBG(' ...Continue... ctrl_data=~p~n',[CtrlData]), + State1 = State0#state{ctrl_data = CtrlData}, + State = activate_ctrl_connection(State1), + {noreply, State}; + {continue, CtrlData} -> + ?DBG(' ...Continue... ctrl_data=~p~n',[CtrlData]), {noreply, State0} end; |