From: Lennart Poettering Date: Thu, 28 Jan 2021 17:16:01 +0000 (+0100) Subject: import: don't invoke compress callbacks with empty data X-Git-Tag: v248-rc1~237^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9f0b5640bd316cc23234370abd3a8b2db6e709dd;p=thirdparty%2Fsystemd.git import: don't invoke compress callbacks with empty data It's pointless if no data was generated. (This happens if an empty file is compressed) --- diff --git a/src/import/import-compress.c b/src/import/import-compress.c index b89ffb1b2ac..c016587e14f 100644 --- a/src/import/import-compress.c +++ b/src/import/import-compress.c @@ -125,9 +125,11 @@ int import_uncompress(ImportCompress *c, const void *data, size_t size, ImportCo if (!IN_SET(lzr, LZMA_OK, LZMA_STREAM_END)) return -EIO; - r = callback(buffer, sizeof(buffer) - c->xz.avail_out, userdata); - if (r < 0) - return r; + if (c->xz.avail_out < sizeof(buffer)) { + r = callback(buffer, sizeof(buffer) - c->xz.avail_out, userdata); + if (r < 0) + return r; + } } break; @@ -146,9 +148,11 @@ int import_uncompress(ImportCompress *c, const void *data, size_t size, ImportCo if (!IN_SET(r, Z_OK, Z_STREAM_END)) return -EIO; - r = callback(buffer, sizeof(buffer) - c->gzip.avail_out, userdata); - if (r < 0) - return r; + if (c->gzip.avail_out < sizeof(buffer)) { + r = callback(buffer, sizeof(buffer) - c->gzip.avail_out, userdata); + if (r < 0) + return r; + } } break; @@ -168,9 +172,11 @@ int import_uncompress(ImportCompress *c, const void *data, size_t size, ImportCo if (!IN_SET(r, BZ_OK, BZ_STREAM_END)) return -EIO; - r = callback(buffer, sizeof(buffer) - c->bzip2.avail_out, userdata); - if (r < 0) - return r; + if (c->bzip2.avail_out < sizeof(buffer)) { + r = callback(buffer, sizeof(buffer) - c->bzip2.avail_out, userdata); + if (r < 0) + return r; + } } break;