diff options
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | src/env.c | 4 | ||||
-rw-r--r-- | src/reader.c | 4 | ||||
-rw-r--r-- | src/writer.c | 4 | ||||
-rw-r--r-- | tests/free_null_test.c | 33 | ||||
-rw-r--r-- | wscript | 2 |
6 files changed, 49 insertions, 1 deletions
@@ -2,9 +2,10 @@ serd (0.30.5) unstable; * Fix various minor warnings and other code quality issues * Improve reader error handling + * Make all free functions tolerant of NULL * Parse prefixed names more strictly - -- David Robillard <d@drobilla.net> Sat, 15 Aug 2020 16:22:12 +0000 + -- David Robillard <d@drobilla.net> Sun, 16 Aug 2020 11:01:53 +0000 serd (0.30.4) stable; @@ -47,6 +47,10 @@ serd_env_new(const SerdNode* base_uri) void serd_env_free(SerdEnv* env) { + if (!env) { + return; + } + for (size_t i = 0; i < env->n_prefixes; ++i) { serd_node_free(&env->prefixes[i].name); serd_node_free(&env->prefixes[i].uri); diff --git a/src/reader.c b/src/reader.c index 4710caac..5d33e45d 100644 --- a/src/reader.c +++ b/src/reader.c @@ -218,6 +218,10 @@ serd_reader_set_error_sink(SerdReader* reader, void serd_reader_free(SerdReader* reader) { + if (!reader) { + return; + } + pop_node(reader, reader->rdf_nil); pop_node(reader, reader->rdf_rest); pop_node(reader, reader->rdf_first); diff --git a/src/writer.c b/src/writer.c index 81e0a845..5f312c30 100644 --- a/src/writer.c +++ b/src/writer.c @@ -978,6 +978,10 @@ serd_writer_set_prefix(SerdWriter* writer, void serd_writer_free(SerdWriter* writer) { + if (!writer) { + return; + } + serd_writer_finish(writer); serd_stack_free(&writer->anon_stack); free(writer->bprefix); diff --git a/tests/free_null_test.c b/tests/free_null_test.c new file mode 100644 index 00000000..121a66cd --- /dev/null +++ b/tests/free_null_test.c @@ -0,0 +1,33 @@ +/* + Copyright 2020 David Robillard <http://drobilla.net> + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#undef NDEBUG + +#include "serd/serd.h" + +#include <stddef.h> + +int +main(void) +{ + serd_free(NULL); + serd_node_free(NULL); + serd_env_free(NULL); + serd_reader_free(NULL); + serd_writer_free(NULL); + + return 0; +} @@ -212,6 +212,7 @@ def build(bld): # Test programs for prog in [('serdi_static', 'src/serdi.c'), ('env_test', 'tests/env_test.c'), + ('free_null_test', 'tests/free_null_test.c'), ('read_chunk_test', 'tests/read_chunk_test.c'), ('serd_test', 'tests/serd_test.c')]: bld(features = 'c cprogram', @@ -535,6 +536,7 @@ def test(tst): with tst.group('Unit') as check: check(['./env_test']) + check(['./free_null_test']) check(['./read_chunk_test']) check(['./serd_test']) |