diff options
author | David Robillard <d@drobilla.net> | 2018-12-26 20:08:31 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2019-12-19 20:55:40 -0500 |
commit | aec6a5355d36123b4cb100a5b77c9a7e2c3d1d84 (patch) | |
tree | 3dbb86985b32c3eb5cbb7c94562d4558d5f9aa76 /src/node.c | |
parent | 23f09378718cd5c334a5a090744cda4dfbcdb091 (diff) | |
download | serd-aec6a5355d36123b4cb100a5b77c9a7e2c3d1d84.tar.gz serd-aec6a5355d36123b4cb100a5b77c9a7e2c3d1d84.tar.bz2 serd-aec6a5355d36123b4cb100a5b77c9a7e2c3d1d84.zip |
Ensure serd_new_resolved_uri returns an absolute URI or NULL
Diffstat (limited to 'src/node.c')
-rw-r--r-- | src/node.c | 16 |
1 files changed, 12 insertions, 4 deletions
@@ -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 |