[
https://issues.apache.org/jira/browse/AVRO-980?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Douglas Creager updated AVRO-980:
---------------------------------
Attachment: 0001-AVRO-980.-C-avro_schema_from_json_length.patch
I've put together a better patch for this issue. Here's the commit message
from the patch file:
We now explicitly document that the length and error parameters are unused in
the avro_schema_from_json function. (The error parameter isn't needed, since
any errors parsing or interpreting the JSON text are available using the
avro_strerror() function.)
This patch also adds the new avro_schema_from_json_length function. This
function actually uses its length parameter, and we explicitly document that
the length should *not* include any NUL terminator, if one is present. We also
provide the avro_schema_from_json_literal helper macro, which automatically
calculates the size of a literal JSON string at compile time. (To work, the
JSON string must be defined as a char[], not a char *.)
We decided to fix this bug using a new function because there's existing code
out there that's already assuming that avro_schema_from_json's len parameter is
unused. (Or at least, they're assuming different things about what kind of
value to pass in.) This solution ensures that existing code still works, while
providing a new function for the (needed) non-NUL-terminated case. It comes at
the expense of a sloppy signature for the existing avro_schema_from_json
function...but then, the signature was already sloppy. We're at least not
adding any *new* sloppiness.
We also now use the new avro_schema_from_json_length function when reading an
Avro object container file. This means that we no longer need to append a NUL
terminator to the schema JSON when reading in the container file's header. (We
don't *need to*, but we still do. One change at a time.)
> C: avro_schema_from_json ignores length parameter
> --------------------------------------------------
>
> Key: AVRO-980
> URL: https://issues.apache.org/jira/browse/AVRO-980
> Project: Avro
> Issue Type: Bug
> Components: c
> Affects Versions: 1.6.1
> Environment: Linux x86_64 (Ubuntu 11.10)
> Avro 1.6.1
> GCC 4.6.1
> cmake 2.8.5
> Reporter: Michael Cooper
> Priority: Minor
> Labels: c, schema
> Attachments:
> 0001-AVRO-980.-C-Handle-length-parameter-in-avro_schema_f.patch,
> 0001-AVRO-980.-C-avro_schema_from_json_length.patch
>
>
> The function avro_schema_from_json() takes in a const char* and a length
> parameter, but it appears that the length parameter is ignored.
> We have a project where the schema is a binary resource compiled into the
> executable, and is not guaranteed to have a null terminator at the end.
> This did not appear to be an issue because the function had a length
> parameter.
> The other day, It kept throwing errors about characters that were not in the
> file at all.
> Suspecting it was running off the end of the file, I had a look at the Avro-C
> code and found that even though the function takes in a length parameter, it
> does not use it and expects a null terminator.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira