mirror of
https://github.com/ostreedev/ostree.git
synced 2025-03-16 10:50:43 +03:00
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:
parent
b6e2eaf212
commit
dd35e1b9cd
@ -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");
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user