mirror of
https://github.com/curl/curl.git
synced 2026-07-25 04:17:21 +03:00
FTP: partly revert eeb7c12807
Since ASCII transfers on FTP means sending CRLF line endings, we should
still keep converting them to LF-only on platforms where text files
typically do not use CRLF.
This also DOES NOT convert existing CRLF line endings on ASCII uploads
but only does stand-alone LF => CRLF.
Regression from eeb7c12807 shipped in 8.10.0
Reported-by: finkjsc on github
Fixes #14873
Closes #14875
This commit is contained in:
parent
2b652b8634
commit
7eda757d99
7 changed files with 54 additions and 19 deletions
16
lib/sendf.c
16
lib/sendf.c
|
|
@ -949,6 +949,7 @@ struct cr_lc_ctx {
|
|||
struct bufq buf;
|
||||
BIT(read_eos); /* we read an EOS from the next reader */
|
||||
BIT(eos); /* we have returned an EOS */
|
||||
BIT(prev_cr); /* the last byte was a CR */
|
||||
};
|
||||
|
||||
static CURLcode cr_lc_init(struct Curl_easy *data, struct Curl_creader *reader)
|
||||
|
|
@ -1005,10 +1006,15 @@ static CURLcode cr_lc_read(struct Curl_easy *data,
|
|||
goto out;
|
||||
}
|
||||
|
||||
/* at least one \n needs conversion to '\r\n', place into ctx->buf */
|
||||
/* at least one \n might need conversion to '\r\n', place into ctx->buf */
|
||||
for(i = start = 0; i < nread; ++i) {
|
||||
if(buf[i] != '\n')
|
||||
/* if this byte is not an LF character, or if the preceding character is
|
||||
a CR (meaning this already is a CRLF pair), go to next */
|
||||
if((buf[i] != '\n') || ctx->prev_cr) {
|
||||
ctx->prev_cr = (buf[i] == '\r');
|
||||
continue;
|
||||
}
|
||||
ctx->prev_cr = false;
|
||||
/* on a soft limit bufq, we do not need to check length */
|
||||
result = Curl_bufq_cwrite(&ctx->buf, buf + start, i - start, &n);
|
||||
if(!result)
|
||||
|
|
@ -1101,7 +1107,11 @@ static CURLcode do_init_reader_stack(struct Curl_easy *data,
|
|||
clen = r->crt->total_length(data, r);
|
||||
/* if we do not have 0 length init, and crlf conversion is wanted,
|
||||
* add the reader for it */
|
||||
if(clen && (data->set.crlf || data->state.prefer_ascii)) {
|
||||
if(clen && (data->set.crlf
|
||||
#ifdef CURL_PREFER_LF_LINEENDS
|
||||
|| data->state.prefer_ascii
|
||||
#endif
|
||||
)) {
|
||||
result = cr_lc_add(data);
|
||||
if(result)
|
||||
return result;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue