From 055735f696138614d51e92f1152bb02f0cfbefe0 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 24 Nov 2022 16:40:46 -0500 Subject: Gracefully handle bad characters in Turtle datatype syntax --- NEWS | 3 ++- src/n3.c | 7 +++++-- test/bad/bad-datatype-syntax.ttl | 1 + test/bad/manifest.ttl | 6 ++++++ 4 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 test/bad/bad-datatype-syntax.ttl 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 Mon, 14 Nov 2022 21:06:21 +0000 + -- David Robillard 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 @@ + "value"^ . 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-datatype-syntax> + rdf:type rdft:TestTurtleNegativeSyntax ; + mf:name "bad-datatype-syntax" ; + mf:action . + <#bad-datatype> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-datatype" ; -- cgit v1.2.1