From 8dec5c9b7663478c89e58dd64e47422d60a92ecb Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 26 Dec 2018 20:08:31 -0500 Subject: Ensure serd_new_resolved_uri returns an absolute URI or NULL --- src/node.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/node.c') diff --git a/src/node.c b/src/node.c index d30a2c6d..55ee1d70 100644 --- a/src/node.c +++ b/src/node.c @@ -423,14 +423,22 @@ serd_node_resolve(const SerdNode* node, const SerdNode* base) SerdNode* serd_new_resolved_uri_i(const char* str, const SerdURI* base) { + SerdNode* result = NULL; if (!str || str[0] == '\0') { // Empty URI => Base URI, or nothing if no base is given - return base ? serd_new_from_uri(base, NULL) : NULL; + result = base ? serd_new_from_uri(base, NULL) : NULL; + } else { + SerdURI uri; + serd_uri_parse(str, &uri); + result = serd_new_from_uri(&uri, base); } - SerdURI uri; - serd_uri_parse(str, &uri); - return serd_new_from_uri(&uri, base); + if (!serd_uri_string_has_scheme(serd_node_get_string(result))) { + serd_node_free(result); + return NULL; + } + + return result; } static inline bool -- cgit v1.2.1