aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-08-13 01:44:03 +0200
committerDavid Robillard <d@drobilla.net>2020-10-27 13:13:59 +0100
commitb244d0ec5895ff15d52f12704e5f336ad37b4473 (patch)
tree29bf5c2d05df55ab1fc2ec626988270436e4b6dd
parent8563932ab3abcbf886d1ec77b3ad632aeb9a3ea1 (diff)
downloadserd-b244d0ec5895ff15d52f12704e5f336ad37b4473.tar.gz
serd-b244d0ec5895ff15d52f12704e5f336ad37b4473.tar.bz2
serd-b244d0ec5895ff15d52f12704e5f336ad37b4473.zip
Refuse to write relative URIRefs to NTriples
-rw-r--r--src/writer.c15
-rw-r--r--wscript3
2 files changed, 17 insertions, 1 deletions
diff --git a/src/writer.c b/src/writer.c
index fe29563b..697d0e7c 100644
--- a/src/writer.c
+++ b/src/writer.c
@@ -165,6 +165,12 @@ supports_abbrev(const SerdWriter* writer)
return writer->syntax == SERD_TURTLE || writer->syntax == SERD_TRIG;
}
+static bool
+supports_uriref(const SerdWriter* writer)
+{
+ return writer->syntax == SERD_TURTLE || writer->syntax == SERD_TRIG;
+}
+
static SerdStatus
free_context(SerdWriter* writer)
{
@@ -674,6 +680,15 @@ write_uri_node(SerdWriter* const writer,
}
}
+ if (!has_scheme && !supports_uriref(writer) &&
+ !serd_env_base_uri(writer->env)) {
+ SERD_LOG_ERRORF(world,
+ SERD_ERR_INVALID,
+ "syntax does not support URI reference <%s>\n",
+ serd_node_string(node));
+ return SERD_ERR_INVALID;
+ }
+
TRY(st, esink("<", 1, writer));
if (!(writer->flags & SERD_WRITE_UNRESOLVED) &&
serd_env_base_uri(writer->env)) {
diff --git a/wscript b/wscript
index f591cc91..1a6998ca 100644
--- a/wscript
+++ b/wscript
@@ -737,7 +737,7 @@ def test(tst):
check([serdi, '%s/serd.ttl' % srcdir], stdout=os.devnull)
check([serdi, '-v'])
check([serdi, '-h'])
- check([serdi, '-k', '512', '-s', '<foo> a <#Thingie> .'])
+ check([serdi, '-k', '512', '-s', '<urn:eg:s> a <urn:eg:T> .'])
check([serdi, os.devnull])
with tempfile.TemporaryFile(mode='r') as stdin:
@@ -792,6 +792,7 @@ def test(tst):
check([serdi, '-s'])
check([serdi, '-z'])
check([serdi] + ['%s/tests/bad/bad-base.ttl' % srcdir] * 2)
+ check([serdi, '-s', '<foo> a <Bar> .'])
with tst.group('IoErrors', expected=1) as check:
check([serdi, '-e', 'file://%s/' % srcdir], name='Read directory')