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:24:26 UTC

svn commit: r1384543 - in /avro/trunk: CHANGES.txt lang/c/src/value-read.c

Author: dcreager
Date: Thu Sep 13 21:24:25 2012
New Revision: 1384543

URL: http://svn.apache.org/viewvc?rev=1384543&view=rev
Log:
AVRO-1159. C: Check union discriminant in avro_value_read.

Contributed by Lucas Martin-King.

Modified:
    avro/trunk/CHANGES.txt
    avro/trunk/lang/c/src/value-read.c

Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1384543&r1=1384542&r2=1384543&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Thu Sep 13 21:24:25 2012
@@ -64,6 +64,9 @@ Avro 1.7.2 (unreleased)
     AVRO-1158. C: Fixed infinite loop in deflate decompression codec.
     (Lucas Martin-King via dcreager)
 
+    AVRO-1159. C: Check union discriminants in avro_value_read.
+    (Lucas Martin-King via dcreager)
+
 Avro 1.7.1 (16 July 2012)
 
   NEW FEATURES

Modified: avro/trunk/lang/c/src/value-read.c
URL: http://svn.apache.org/viewvc/avro/trunk/lang/c/src/value-read.c?rev=1384543&r1=1384542&r2=1384543&view=diff
==============================================================================
--- avro/trunk/lang/c/src/value-read.c (original)
+++ avro/trunk/lang/c/src/value-read.c Thu Sep 13 21:24:25 2012
@@ -165,6 +165,13 @@ read_union_value(avro_reader_t reader, a
 	check_prefix(rval, avro_binary_encoding.
 		     read_long(reader, &discriminant),
 		     "Cannot read union discriminant: ");
+
+	if (discriminant < 0) {
+		avro_set_error("Invalid union discriminant value: (%d)",
+			       discriminant);
+		return 1;
+	}
+
 	check(rval, avro_value_set_branch(dest, discriminant, &branch));
 	check(rval, read_value(reader, &branch));
 	return 0;