aboutsummaryrefslogtreecommitdiffstats
path: root/src/node.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-12-26 20:08:31 -0500
committerDavid Robillard <d@drobilla.net>2020-06-21 18:12:04 +0200
commit8dec5c9b7663478c89e58dd64e47422d60a92ecb (patch)
tree10f21e7767c6f0237fbd4dcf0c0fc42ada653434 /src/node.c
parent9a4ac7d20362d8e67551dd8a93f70b741a043877 (diff)
downloadserd-8dec5c9b7663478c89e58dd64e47422d60a92ecb.tar.gz
serd-8dec5c9b7663478c89e58dd64e47422d60a92ecb.tar.bz2
serd-8dec5c9b7663478c89e58dd64e47422d60a92ecb.zip
Ensure serd_new_resolved_uri returns an absolute URI or NULL
Diffstat (limited to 'src/node.c')
-rw-r--r--src/node.c16
1 files changed, 12 insertions, 4 deletions
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