aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2023-04-03 10:47:40 -0400
committerDavid Robillard <d@drobilla.net>2023-04-06 07:19:10 -0400
commit9910494d7bb417fb75f1c99b65f9956d14184059 (patch)
tree24d59725e7aaef0f1dd08e54367c531484773091
parent0065bfadaa18c53b077ded4fbca09da65ed84017 (diff)
downloadserd-9910494d7bb417fb75f1c99b65f9956d14184059.tar.gz
serd-9910494d7bb417fb75f1c99b65f9956d14184059.tar.bz2
serd-9910494d7bb417fb75f1c99b65f9956d14184059.zip
Gracefully handle boolean subject and predicate errors
-rw-r--r--src/n3.c3
-rw-r--r--test/extra/bad/bad-a-object.ttl3
-rw-r--r--test/extra/bad/bad-a-subject.ttl4
-rw-r--r--test/extra/bad/bad-false-predicate.ttl3
-rw-r--r--test/extra/bad/bad-false-subject.ttl3
-rw-r--r--test/extra/bad/bad-true-predicate.ttl3
-rw-r--r--test/extra/bad/bad-true-subject.ttl3
7 files changed, 20 insertions, 2 deletions
diff --git a/src/n3.c b/src/n3.c
index 38505ee2..56b4a625 100644
--- a/src/n3.c
+++ b/src/n3.c
@@ -1644,6 +1644,9 @@ read_n3_statement(SerdReader* const reader)
pop_node(reader, ctx.graph);
ctx.graph = 0;
read_ws_star(reader);
+ } else if (!tokcmp(reader, ctx.subject, "true", 4) ||
+ !tokcmp(reader, ctx.subject, "false", 5)) {
+ return r_err(reader, SERD_ERR_BAD_SYNTAX, "expected subject\n");
} else if (read_ws_star(reader) && peek_byte(reader) == '{') {
if (s_type == '(' || (s_type == '[' && !*ctx.flags)) {
return r_err(reader, SERD_ERR_BAD_SYNTAX, "invalid graph name\n");
diff --git a/test/extra/bad/bad-a-object.ttl b/test/extra/bad/bad-a-object.ttl
new file mode 100644
index 00000000..72d5c269
--- /dev/null
+++ b/test/extra/bad/bad-a-object.ttl
@@ -0,0 +1,3 @@
+@prefix : <http://example.org/> .
+
+:a :b a .
diff --git a/test/extra/bad/bad-a-subject.ttl b/test/extra/bad/bad-a-subject.ttl
index 07a372f1..11d98d98 100644
--- a/test/extra/bad/bad-a-subject.ttl
+++ b/test/extra/bad/bad-a-subject.ttl
@@ -1,3 +1,3 @@
-# 'a' only allowed as a predicate
-@prefix : <http://example.org/base#> .
+@prefix : <http://example.org/> .
+
a :a :b .
diff --git a/test/extra/bad/bad-false-predicate.ttl b/test/extra/bad/bad-false-predicate.ttl
new file mode 100644
index 00000000..074c4d14
--- /dev/null
+++ b/test/extra/bad/bad-false-predicate.ttl
@@ -0,0 +1,3 @@
+@prefix : <http://example.org/> .
+
+:s false :o .
diff --git a/test/extra/bad/bad-false-subject.ttl b/test/extra/bad/bad-false-subject.ttl
new file mode 100644
index 00000000..945141eb
--- /dev/null
+++ b/test/extra/bad/bad-false-subject.ttl
@@ -0,0 +1,3 @@
+@prefix : <http://example.org/> .
+
+false :p :o .
diff --git a/test/extra/bad/bad-true-predicate.ttl b/test/extra/bad/bad-true-predicate.ttl
new file mode 100644
index 00000000..8d7c0240
--- /dev/null
+++ b/test/extra/bad/bad-true-predicate.ttl
@@ -0,0 +1,3 @@
+@prefix : <http://example.org/> .
+
+:s true :o .
diff --git a/test/extra/bad/bad-true-subject.ttl b/test/extra/bad/bad-true-subject.ttl
new file mode 100644
index 00000000..7808cc45
--- /dev/null
+++ b/test/extra/bad/bad-true-subject.ttl
@@ -0,0 +1,3 @@
+@prefix : <http://example.org/> .
+
+true :p :o .