summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErlang/OTP <otp@erlang.org>2019-11-14 14:56:57 +0100
committerErlang/OTP <otp@erlang.org>2019-11-14 14:56:57 +0100
commita7963abaefb9d19e1a293db3e7d02bd6464c2b16 (patch)
treec9e8a9fcdcad1006abae09e5fb18b19db13251b8
parentd0389a71bf302e2fd9487c1328ec0a5f33169639 (diff)
parent78b734e8cee09d58037a9ceeed7a6ecef90da885 (diff)
downloaderlang-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.erl19
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;