aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2022-11-24 16:40:46 -0500
committerDavid Robillard <d@drobilla.net>2022-11-24 16:40:46 -0500
commit055735f696138614d51e92f1152bb02f0cfbefe0 (patch)
tree291370b16775ba7b94bc3bebf58f8fe7f6719a45
parent4846ad5212db89b9e72abee8da69ba87de65b113 (diff)
downloadserd-055735f696138614d51e92f1152bb02f0cfbefe0.tar.gz
serd-055735f696138614d51e92f1152bb02f0cfbefe0.tar.bz2
serd-055735f696138614d51e92f1152bb02f0cfbefe0.zip
Gracefully handle bad characters in Turtle datatype syntax
-rw-r--r--NEWS3
-rw-r--r--src/n3.c7
-rw-r--r--test/bad/bad-datatype-syntax.ttl1
-rw-r--r--test/bad/manifest.ttl6
4 files changed, 14 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index bb69bdf9..19de1273 100644
--- a/NEWS
+++ b/NEWS
@@ -3,10 +3,11 @@ serd (0.30.17) unstable; urgency=medium
* Add Windows path separator support to serd_node_new_file_uri()
* Fix crash when trying to read chunks without starting
* Fix hang when skipping an error at EOF when lax parsing
+ * Gracefully handle bad characters in Turtle datatype syntax
* Override pkg-config dependency within meson
* Test header for warnings more strictly
- -- David Robillard <d@drobilla.net> Mon, 14 Nov 2022 21:06:21 +0000
+ -- David Robillard <d@drobilla.net> Thu, 24 Nov 2022 20:51:55 +0000
serd (0.30.16) stable; urgency=medium
diff --git a/src/n3.c b/src/n3.c
index f3112be0..bffc423b 100644
--- a/src/n3.c
+++ b/src/n3.c
@@ -943,12 +943,15 @@ read_literal(SerdReader* const reader,
break;
case '^':
eat_byte_safe(reader, '^');
- eat_byte_check(reader, '^');
+ if (!eat_byte_check(reader, '^')) {
+ return r_err(reader, SERD_ERR_BAD_SYNTAX, "expected `^'\n");
+ }
+
if ((st = read_iri(reader, datatype, ate_dot))) {
*datatype = pop_node(reader, *datatype);
*lang = pop_node(reader, *lang);
*dest = pop_node(reader, *dest);
- return r_err(reader, st, "bad literal\n");
+ return r_err(reader, st, "bad datatype\n");
}
break;
}
diff --git a/test/bad/bad-datatype-syntax.ttl b/test/bad/bad-datatype-syntax.ttl
new file mode 100644
index 00000000..541c25d4
--- /dev/null
+++ b/test/bad/bad-datatype-syntax.ttl
@@ -0,0 +1 @@
+<http://example.org/s> <http://example.org/p> "value"^<http://example.org/t> .
diff --git a/test/bad/manifest.ttl b/test/bad/manifest.ttl
index 5f208983..0f4f1338 100644
--- a/test/bad/manifest.ttl
+++ b/test/bad/manifest.ttl
@@ -28,6 +28,7 @@
<#bad-char-in-local>
<#bad-char-in-prefix>
<#bad-char-in-uri>
+ <#bad-datatype-syntax>
<#bad-datatype>
<#bad-dot-after-subject>
<#bad-dot-in-collection>
@@ -185,6 +186,11 @@
mf:name "bad-char-in-uri" ;
mf:action <bad-char-in-uri.ttl> .
+<#bad-datatype-syntax>
+ rdf:type rdft:TestTurtleNegativeSyntax ;
+ mf:name "bad-datatype-syntax" ;
+ mf:action <bad-datatype-syntax.ttl> .
+
<#bad-datatype>
rdf:type rdft:TestTurtleNegativeSyntax ;
mf:name "bad-datatype" ;