Skip to content

Commit

Permalink
Fixes asyncftpclient multiline reading, fixes #4684 (#13242)
Browse files Browse the repository at this point in the history
Previously, the 4th character of `result` was checked for `'-'` every time, instead of each new line.

Also made it work for taint mode.
  • Loading branch information
metagn authored and Araq committed Jan 23, 2020
1 parent caaa8f2 commit 4656580
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions lib/pure/asyncftpclient.nim
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,13 @@ type
const multiLineLimit = 10000

proc expectReply(ftp: AsyncFtpClient): Future[TaintedString] {.async.} =
result = await ftp.csock.recvLine()
var line = await ftp.csock.recvLine()
result = TaintedString(line)
var count = 0
while result[3] == '-':
while line[3] == '-':
## Multi-line reply.
let line = await ftp.csock.recvLine()
result.add("\n" & line)
line = await ftp.csock.recvLine()
string(result).add("\n" & line)
count.inc()
if count >= multiLineLimit:
raise newException(ReplyError, "Reached maximum multi-line reply count.")
Expand Down Expand Up @@ -178,7 +179,7 @@ proc connect*(ftp: AsyncFtpClient) {.async.} =
await ftp.csock.connect(ftp.address, ftp.port)

var reply = await ftp.expectReply()
if reply.startsWith("120"):
if string(reply).startsWith("120"):
# 120 Service ready in nnn minutes.
# We wait until we receive 220.
reply = await ftp.expectReply()
Expand Down

0 comments on commit 4656580

Please sign in to comment.