journal-upload: check for overflow
CID 1394386
This commit is contained in:
parent
0b2c35b812
commit
c504106c35
|
@ -280,8 +280,7 @@ int start_upload(Uploader *u,
|
||||||
|
|
||||||
static size_t fd_input_callback(void *buf, size_t size, size_t nmemb, void *userp) {
|
static size_t fd_input_callback(void *buf, size_t size, size_t nmemb, void *userp) {
|
||||||
Uploader *u = userp;
|
Uploader *u = userp;
|
||||||
|
ssize_t n;
|
||||||
ssize_t r;
|
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
assert(nmemb < SSIZE_MAX / size);
|
assert(nmemb < SSIZE_MAX / size);
|
||||||
|
@ -289,21 +288,22 @@ static size_t fd_input_callback(void *buf, size_t size, size_t nmemb, void *user
|
||||||
if (u->input < 0)
|
if (u->input < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
r = read(u->input, buf, size * nmemb);
|
assert(!size_multiply_overflow(size, nmemb));
|
||||||
log_debug("%s: allowed %zu, read %zd", __func__, size*nmemb, r);
|
|
||||||
|
|
||||||
if (r > 0)
|
n = read(u->input, buf, size * nmemb);
|
||||||
return r;
|
log_debug("%s: allowed %zu, read %zd", __func__, size*nmemb, n);
|
||||||
|
if (n > 0)
|
||||||
|
return n;
|
||||||
|
|
||||||
u->uploading = false;
|
u->uploading = false;
|
||||||
if (r == 0) {
|
if (n < 0) {
|
||||||
log_debug("Reached EOF");
|
|
||||||
close_fd_input(u);
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
log_error_errno(errno, "Aborting transfer after read error on input: %m.");
|
log_error_errno(errno, "Aborting transfer after read error on input: %m.");
|
||||||
return CURL_READFUNC_ABORT;
|
return CURL_READFUNC_ABORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log_debug("Reached EOF");
|
||||||
|
close_fd_input(u);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void close_fd_input(Uploader *u) {
|
static void close_fd_input(Uploader *u) {
|
||||||
|
|
Loading…
Reference in a new issue