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)
This commit is contained in:
Lennart Poettering
2021-01-29 16:40:20 +01:00
parent 0dfb650387
commit 9f0b5640bd
+15 -9
View File
@@ -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;