Merge "Avoid calling memcpy when len == 0 in filetransfer.cc" into main

This commit is contained in:
Lulu 2024-10-08 01:41:41 +00:00 committed by Gerrit Code Review
commit 299813f324
2 changed files with 12 additions and 1 deletions

View file

@ -6,6 +6,7 @@
#include "signals.hh"
#include "compression.hh"
#include "strings.hh"
#include <cstddef>
#if ENABLE_S3
#include <aws/core/client/ClientConfiguration.h>
@ -784,8 +785,10 @@ struct curlFileTransfer : public FileTransfer
size_t read(char * data, size_t len) override
{
auto readPartial = [this](char * data, size_t len) {
auto readPartial = [this](char * data, size_t len) -> size_t {
const auto available = std::min(len, buffered.size());
if (available == 0u) return 0u;
memcpy(data, buffered.data(), available);
buffered.remove_prefix(available);
return available;

View file

@ -150,6 +150,14 @@ TEST(FileTransfer, exceptionAbortsDownload)
}
}
TEST(FileTransfer, exceptionAbortsRead)
{
auto [port, srv] = serveHTTP("200 ok", "content-length: 0\r\n", [] { return ""; });
auto ft = makeFileTransfer();
char buf[10] = "";
ASSERT_THROW(ft->download(FileTransferRequest(fmt("http://[::1]:%d/index", port)))->read(buf, 10), EndOfFile);
}
TEST(FileTransfer, NOT_ON_DARWIN(reportsSetupErrors))
{
auto [port, srv] = serveHTTP("404 not found", "", [] { return ""; });