You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by dc...@apache.org on 2012/09/13 23:20:34 UTC
svn commit: r1384540 - in /avro/trunk: CHANGES.txt lang/c/src/codec.c
lang/c/src/datafile.c
Author: dcreager
Date: Thu Sep 13 21:20:34 2012
New Revision: 1384540
URL: http://svn.apache.org/viewvc?rev=1384540&view=rev
Log:
AVRO-1158. C: Fix infinite loop in delate codec decompression.
Contributed by Lucas Martin-King.
Modified:
avro/trunk/CHANGES.txt
avro/trunk/lang/c/src/codec.c
avro/trunk/lang/c/src/datafile.c
Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1384540&r1=1384539&r2=1384540&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Thu Sep 13 21:20:34 2012
@@ -61,6 +61,9 @@ Avro 1.7.2 (unreleased)
AVRO-1154. Java: Fix NettyTransciever to not hang when the server
is stopped. (Karel Vervaeke & Bruno Dumon via cutting)
+ AVRO-1158. C: Fixed infinite loop in deflate decompression codec.
+ (Lucas Martin-King via dcreager)
+
Avro 1.7.1 (16 July 2012)
NEW FEATURES
Modified: avro/trunk/lang/c/src/codec.c
URL: http://svn.apache.org/viewvc/avro/trunk/lang/c/src/codec.c?rev=1384540&r1=1384539&r2=1384540&view=diff
==============================================================================
--- avro/trunk/lang/c/src/codec.c (original)
+++ avro/trunk/lang/c/src/codec.c Thu Sep 13 21:20:34 2012
@@ -207,6 +207,14 @@ static int decode_deflate(avro_codec_t c
{
err = inflate(s, Z_FINISH);
+ // Apparently if there is yet available space in the output then something
+ // has gone wrong in decompressing the data (according to cpython zlibmodule.c)
+ if (err == Z_BUF_ERROR && s->avail_out > 0) {
+ inflateEnd(s);
+ avro_set_error("Error decompressing block with deflate, possible data error");
+ return 1;
+ }
+
// The buffer was not big enough. resize it.
if (err == Z_BUF_ERROR)
{
@@ -229,6 +237,7 @@ static int decode_deflate(avro_codec_t c
c->used_size = s->total_out;
if (inflateReset(s) != Z_OK) {
+ avro_set_error("Error resetting deflate decompression");
return 1;
}
Modified: avro/trunk/lang/c/src/datafile.c
URL: http://svn.apache.org/viewvc/avro/trunk/lang/c/src/datafile.c?rev=1384540&r1=1384539&r2=1384540&view=diff
==============================================================================
--- avro/trunk/lang/c/src/datafile.c (original)
+++ avro/trunk/lang/c/src/datafile.c Thu Sep 13 21:20:34 2012
@@ -453,7 +453,8 @@ static int file_read_block_count(avro_fi
check_prefix(rval, avro_read(r->reader, r->current_blockdata, len),
"Cannot read file block: ");
- avro_codec_decode(r->codec, r->current_blockdata, len);
+ check_prefix(rval, avro_codec_decode(r->codec, r->current_blockdata, len),
+ "Cannot decode file block: ");
avro_reader_memory_set_source(r->block_reader, (const char *) r->codec->block_data, r->codec->used_size);