[ostree] static-delta: Handle LZMA_BUF_ERROR returned by zlib
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] static-delta: Handle LZMA_BUF_ERROR returned by zlib
- Date: Sat, 10 Oct 2015 14:29:01 +0000 (UTC)
commit dd35e1b9cdb4b8abf0ffd15263ae33db3e729d75
Author: John Hiesey <john hiesey com>
Date: Wed Oct 7 13:30:33 2015 -0700
static-delta: Handle LZMA_BUF_ERROR returned by zlib
zlib can return LZMA_BUF_ERROR, which indicates that either
the input or output buffer has size zero. This case should cause
the correct error to be passed back from g_converter_convert
to expand the relevant buffer. Since this error is ambiguous
as to which buffer is too small, an explicit check on the
output buffer size is added as well.
https://bugzilla.gnome.org/show_bug.cgi?id=756260
src/libostree/ostree-lzma-common.c | 4 ++++
src/libostree/ostree-lzma-compressor.c | 7 +++++++
src/libostree/ostree-lzma-decompressor.c | 7 +++++++
3 files changed, 18 insertions(+), 0 deletions(-)
---
diff --git a/src/libostree/ostree-lzma-common.c b/src/libostree/ostree-lzma-common.c
index 3600efd..61f3a2a 100644
--- a/src/libostree/ostree-lzma-common.c
+++ b/src/libostree/ostree-lzma-common.c
@@ -62,6 +62,10 @@ _ostree_lzma_return (lzma_ret res,
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Data is corrupt");
return G_CONVERTER_ERROR;
+ case LZMA_BUF_ERROR:
+ g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PARTIAL_INPUT,
+ "Input buffer too small");
+ return G_CONVERTER_ERROR;
default:
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Unrecognized LZMA error");
diff --git a/src/libostree/ostree-lzma-compressor.c b/src/libostree/ostree-lzma-compressor.c
index ce429f9..1ec03c4 100644
--- a/src/libostree/ostree-lzma-compressor.c
+++ b/src/libostree/ostree-lzma-compressor.c
@@ -173,6 +173,13 @@ _ostree_lzma_compressor_convert (GConverter *converter,
int res;
lzma_action action;
+ if (inbuf_size != 0 && outbuf_size == 0)
+ {
+ g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NO_SPACE,
+ "Output buffer too small");
+ return G_CONVERTER_ERROR;
+ }
+
if (!self->initialized)
{
res = lzma_easy_encoder (&self->lstream, 8, LZMA_CHECK_CRC64);
diff --git a/src/libostree/ostree-lzma-decompressor.c b/src/libostree/ostree-lzma-decompressor.c
index 5163013..b46e8fb 100644
--- a/src/libostree/ostree-lzma-decompressor.c
+++ b/src/libostree/ostree-lzma-decompressor.c
@@ -104,6 +104,13 @@ _ostree_lzma_decompressor_convert (GConverter *converter,
OstreeLzmaDecompressor *self = OSTREE_LZMA_DECOMPRESSOR (converter);
int res;
+ if (inbuf_size != 0 && outbuf_size == 0)
+ {
+ g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NO_SPACE,
+ "Output buffer too small");
+ return G_CONVERTER_ERROR;
+ }
+
if (!self->initialized)
{
res = lzma_stream_decoder (&self->lstream, G_MAXUINT64, 0);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]