Ismaël Mejía created AVRO-4305:
----------------------------------

             Summary: C: make st_insert() OOM-safe (check avro_new() allocation 
failure)
                 Key: AVRO-4305
                 URL: https://issues.apache.org/jira/browse/AVRO-4305
             Project: Apache Avro
          Issue Type: Improvement
          Components: c
            Reporter: Ismaël Mejía
            Assignee: Ismaël Mejía


h2. Summary

The vendored {{st}} hash table used by the C SDK ({{lang/c/src/st.c}}) allocates
table entries via {{avro_new()}} in {{st_insert()}}/{{ADD_DIRECT}} (around
st.c:260-267) without checking for a NULL return. On allocation failure this can
dereference NULL and crash rather than returning an error, so map decoding (and
any other {{st}} user) is not OOM-safe on that path.

h2. Context

Noted during review of AVRO-4293 (bound allocation when decoding
length-prefixed values and collections). That PR removed the NULL-dereference on
{{avro_raw_array_append}}/{{avro_strdup}} in {{map.c}}, but {{st_insert()}}'s
internal allocation remains unchecked. Making {{st_insert()}}/{{ADD_DIRECT}}
handle allocation failure (return an error and leave the table unchanged) is a
broader change to shared code and was deliberately kept out of that PR's scope.

h2. Proposed approach

* Make {{st_insert()}} (and the {{ADD_DIRECT}} macro) detect a failed
  {{avro_new()}} and return an error/failure indication, leaving the table
  unchanged.
* Update callers (e.g. {{avro_generic_map}} in {{map.c}}) to propagate the error
  and roll back (element count, key copy) on failure.
* Audit other {{st}} users for the new failure mode.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to