From 155fceabe7070b6610d577734734d038d097b088 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 2 Jan 2022 14:12:54 -0500 Subject: Add assertions for all non-null pointers in the public API Clang issues warnings at build time based on the SERD_NONNULL annotations, which is a much better approach in general. However, it does not cover cases where the API is being used with another compiler, or without a compiler that can statically check things at all (such as Python or other dynamic language bindings). In those situations, getting a clear assertion message is a lot less confusing than a random crash somewhere in serd, and it makes it clear that the bug is in the caller, so I think it's worth the tedious verbosity. --- src/sink.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/sink.c') diff --git a/src/sink.c b/src/sink.c index 4b7c6646..bd6f1193 100644 --- a/src/sink.c +++ b/src/sink.c @@ -52,12 +52,18 @@ serd_sink_free(SerdSink* sink) SerdStatus serd_sink_write_event(const SerdSink* sink, const SerdEvent* event) { + assert(sink); + assert(event); + return sink->on_event ? sink->on_event(sink->handle, event) : SERD_SUCCESS; } SerdStatus serd_sink_write_base(const SerdSink* sink, const SerdNode* uri) { + assert(sink); + assert(uri); + const SerdBaseEvent ev = {SERD_BASE, uri}; return sink->on_event ? sink->on_event(sink->handle, (const SerdEvent*)&ev) @@ -69,6 +75,10 @@ serd_sink_write_prefix(const SerdSink* sink, const SerdNode* name, const SerdNode* uri) { + assert(sink); + assert(name); + assert(uri); + const SerdPrefixEvent ev = {SERD_PREFIX, name, uri}; return sink->on_event ? sink->on_event(sink->handle, (const SerdEvent*)&ev) @@ -80,6 +90,9 @@ serd_sink_write_statement(const SerdSink* sink, const SerdStatementFlags flags, const SerdStatement* statement) { + assert(sink); + assert(statement); + const SerdStatementEvent statement_ev = {SERD_STATEMENT, flags, statement}; SerdEvent ev = {SERD_STATEMENT}; ev.statement = statement_ev; @@ -107,6 +120,9 @@ serd_sink_write(const SerdSink* sink, SerdStatus serd_sink_write_end(const SerdSink* sink, const SerdNode* node) { + assert(sink); + assert(node); + const SerdEndEvent ev = {SERD_END, node}; return sink->on_event ? sink->on_event(sink->handle, (const SerdEvent*)&ev) -- cgit v1.2.1