New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Files will not download when using curl 7.62.0 #3253
Comments
Reading through #3206, potentially same issue - although unsure on how to increase verbosity of curl through dmd for compiled executable beyond what I have already provided. |
I don't see any "flip flop" in this log. I see curl using HTTP/1.1 for one of the hosts and HTTP/2 for the other, and that HTTP/2 transfer seems to get you the data. Have you tried to "enforce" HTTP/1.1 for the transfers to see if that chances anything?
I think you need to explain this better because that protocol log you showed doesn't seem to show any problems at all. Does libcurl return an error even? If you rebuild libcurl with |
This is what I was meaning - I was expecting the same method to be used 100% of the time.
It appears that the file "does" get downloaded, and is being written to a temporary file. At the point to transfer completion, the file 'disappears' with no error generated. The 'onedrive' client code - as no error has been generated, proceeds to try and analyse the file - which is not there thus fails. If there was an error, ths would be handled. I suspect 'something' is happening at the point of file receive being finalised inside 'curl'.
I am not a Arch linux user, so will have to get some assistance with that. |
If both servers had accepted HTTP/2, curl would've used it with both.
libcurl does not write to a (temporary) file on its own. The application made the output end up in that file.
libcurl did not do that. It didn't know about the file and it can't and won't remove local files. That sounds like the application did that.
To curl, all data is just a stream of bytes and it passes that stream on to the callback. It doesn't "finalise" the output. So again: did libcurl return any error somewhere? If not, you probably need to either provide logs with more details or, preferably, an example source code that can reproduce this problem. |
I am working on gathering additional logs to rule out a libcurl problem, will also be doing a wireshark capture to see if anything is occuring at the network layer. It seems odd to me that it works without issue with http 1.1 but fails when libcurl switches to http2 |
I totally agree that it seems to have a correlation with the issue, but without more information I can't properly deduce where the problem actually lies or how to fix it. |
@bagder Will see how I can get the further debug items from libcurl, however it certainly points to something in the libcurl library and http2 |
... or bad assumptions or wrong handling in the application, yes. But we need details to tell for sure. |
No bad assumptions - I think there is certainly something up with this release: skilion/onedrive#430 I have asked for the details from users regarding getting additional debug details for you - alas nothing as yet. |
I think I'm not expressing myself clearly enough. curl 7.62.0 now makes lots of requests use HTTP/2 by default compared previous versions, which of course changes things a bit. Servers will now speak HTTP/2 and respond with that protocol version instead of HTTP/1.1 like before, unless the application explicitly asks for HTTP/1. This changes the responses slightly and an application that has made assumptions about the response being exactly like before in HTTP/1 land might get into trouble with HTTP/2. Unless you've actually debugged the problem or reviewed the application code, you can't know if there are such "bad" assumptions or not. HTTP/2 is also quite different than HTTP/1 for servers so there's also the risk that this change triggers new issues in the server software that it previously didn't. Like #3206. Then we can of course not rule out that there's a libcurl issue or bug that gets triggered here. We're far from perfect and we also have our share of bugs. But we need a way to reproduce or understand the reported issue before we'd make that conclusion or even just start digging around the code to research this deeper. You have only so far reported some weirdo symptoms in an curl-using application. I would urge you to work with the author(s) of this app to try to reproduce an as small reproducible example as possible that shows this problem happen. Be it either a small C source code that uses libcurl or perhaps even a curl command line. |
@bagder |
I did this
Arch Linux updated to Curl to 7.62.0, which subsequently broke how the Linux OneDrive client (https://github.com/abraunegg/onedrive) operates. It appears to be some sort of 'flip / flop' between each request between HTTP 1.1 and HTTP 2 when downloading content.
The impact of this is, that whilst the files / data is uploaded / downloaded - the actual operations fail as some sort of internal mechanics is barfing the buffer streams thus files fail to download and get deleted - data loss.
OneDrive Linux Client issue: abraunegg/onedrive#220
OneDrive Linux Application log file below:
I expected the following
Correct download of files as per 7.61.x curl version
curl/libcurl version
curl 7.62.0 (x86_64-pc-linux-gnu) libcurl/7.62.0 OpenSSL/1.1.1 zlib/1.2.11 libidn2/2.0.5 libpsl/0.20.2 (+libidn2/2.0.4) libssh2/1.8.0 nghttp2/1.34.0
Release-Date: 2018-10-31
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL
(As per Arch Linux package)
operating system
Linux 127.0.0.1localhost 4.18.16-arch1-1-ARCH #1 SMP PREEMPT Sat Oct 20 22:06:45 UTC 2018 x86_64 GNU/Linux
The text was updated successfully, but these errors were encountered: