From: Ben Pfaff Date: Thu, 10 Jun 2010 22:31:55 +0000 (-0700) Subject: ovsdb-idlc: Fix sizeof calculation in generated code. X-Git-Tag: v1.1.0pre1~236 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=d78ac3883fd1511505aa3f13db2a571015b03bf2;p=sliver-openvswitch.git ovsdb-idlc: Fix sizeof calculation in generated code. Generated __parse_ functions did not allocate enough memory for the "value" array, because code that should have said, e.g.: row->value_options = xmalloc(datum->n * sizeof *row->value_options); actually said: row->value_options = xmalloc(datum->n * sizeof row->value_options); This fixes the problem. I also checked that the same problem didn't occur elsewhere in the generated code. (This would be a fairly serious bug fix, because without it reads and writes beyond the end of allocated memory would be almost inevitable, except that every existing map has string values, and sizeof(char*) == sizeof(char**) on any sane system.) --- diff --git a/ovsdb/ovsdb-idlc.in b/ovsdb/ovsdb-idlc.in index c01034882..9a235e27e 100755 --- a/ovsdb/ovsdb-idlc.in +++ b/ovsdb/ovsdb-idlc.in @@ -311,7 +311,7 @@ static void print "%sif (!row->n_%s) {" % (indent, columnName) print "%s %s = xmalloc(%s * sizeof *%s);" % (indent, keyVar, nMax, keyVar) if valueVar: - print "%s %s = xmalloc(%s * sizeof %s);" % (indent, valueVar, nMax, valueVar) + print "%s %s = xmalloc(%s * sizeof *%s);" % (indent, valueVar, nMax, valueVar) print "%s}" % indent print "%s%s[row->n_%s] = %s;" % (indent, keyVar, columnName, keySrc) if valueVar: