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
This commit is contained in:
John Hiesey 2015-10-07 13:30:33 -07:00 committed by Colin Walters
parent b6e2eaf212
commit dd35e1b9cd
3 changed files with 18 additions and 0 deletions

View File

@ -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");

View File

@ -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);

View File

@ -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);