From 6a9db19eb786b51cf1aea232ae7af72b35ac834a Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 15 Aug 2020 21:41:31 +0200 Subject: Fix EOF and null byte handling This is a bit questionable, but the null byte support is needed for streaming over a socket where some delimiter is required. This caused a bug where serdi would hang forever on corrupt files that contain a null byte. Fix this by consuming the byte, but otherwise behaving as before. --- src/n3.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/n3.c b/src/n3.c index fad12070..906a0ac4 100644 --- a/src/n3.c +++ b/src/n3.c @@ -1063,7 +1063,7 @@ read_object(SerdReader* reader, ReadContext* ctx, bool emit, bool* ate_dot) } } switch (c) { - case EOF: case '\0': case ')': + case EOF: case ')': return r_err(reader, SERD_ERR_BAD_SYNTAX, "expected object\n"); case '[': simple = false; @@ -1166,7 +1166,7 @@ read_predicateObjectList(SerdReader* reader, ReadContext ctx, bool* ate_dot) do { read_ws_star(reader); switch (c = peek_byte(reader)) { - case EOF: case '\0': + case EOF: return r_err(reader, SERD_ERR_BAD_SYNTAX, "unexpected end of file\n"); case '.': case ']': case '}': @@ -1471,7 +1471,10 @@ read_n3_statement(SerdReader* reader) SerdStatus st = SERD_SUCCESS; read_ws_star(reader); switch (peek_byte(reader)) { - case EOF: case '\0': + case '\0': + eat_byte_safe(reader, '\0'); + return SERD_FAILURE; + case EOF: return SERD_FAILURE; case '@': if (!fancy_syntax(reader)) { -- cgit v1.2.1