diff options
author | David Robillard <d@drobilla.net> | 2023-04-03 10:47:40 -0400 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2023-04-06 07:19:10 -0400 |
commit | 9910494d7bb417fb75f1c99b65f9956d14184059 (patch) | |
tree | 24d59725e7aaef0f1dd08e54367c531484773091 | |
parent | 0065bfadaa18c53b077ded4fbca09da65ed84017 (diff) | |
download | serd-9910494d7bb417fb75f1c99b65f9956d14184059.tar.gz serd-9910494d7bb417fb75f1c99b65f9956d14184059.tar.bz2 serd-9910494d7bb417fb75f1c99b65f9956d14184059.zip |
Gracefully handle boolean subject and predicate errors
-rw-r--r-- | src/n3.c | 3 | ||||
-rw-r--r-- | test/extra/bad/bad-a-object.ttl | 3 | ||||
-rw-r--r-- | test/extra/bad/bad-a-subject.ttl | 4 | ||||
-rw-r--r-- | test/extra/bad/bad-false-predicate.ttl | 3 | ||||
-rw-r--r-- | test/extra/bad/bad-false-subject.ttl | 3 | ||||
-rw-r--r-- | test/extra/bad/bad-true-predicate.ttl | 3 | ||||
-rw-r--r-- | test/extra/bad/bad-true-subject.ttl | 3 |
7 files changed, 20 insertions, 2 deletions
@@ -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 . |