aboutsummaryrefslogtreecommitdiffstats
path: root/src/n3.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2025-01-30 14:36:04 -0500
committerDavid Robillard <d@drobilla.net>2025-01-30 15:51:01 -0500
commitc6cb174e7085cd2a41ed0ab74bbcbd7963e68d9d (patch)
treed8c7ae3f1de156f95bbc5c2fc06d527f3dc446b3 /src/n3.c
parente7a120cddc8a72cfcc264c4cd83a0911d352e0a2 (diff)
downloadserd-c6cb174e7085cd2a41ed0ab74bbcbd7963e68d9d.tar.gz
serd-c6cb174e7085cd2a41ed0ab74bbcbd7963e68d9d.tar.bz2
serd-c6cb174e7085cd2a41ed0ab74bbcbd7963e68d9d.zip
Fix handling of some invalid EOF cases in lax mode
The return status of these tests unfortunately isn't consistent, so instead of testing for an exact exit status, instead check that the return status doesn't seem to be an abort() or other signal code (which are negative on Linux, while serdi itself never exits with a negative status).
Diffstat (limited to 'src/n3.c')
-rw-r--r--src/n3.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/n3.c b/src/n3.c
index 31dc5d45..3d4de079 100644
--- a/src/n3.c
+++ b/src/n3.c
@@ -354,11 +354,11 @@ read_STRING_LITERAL_LONG(SerdReader* const reader,
push_byte(reader, ref, c);
st = read_character(reader, ref, flags, (uint8_t)q2);
}
- } else if (c == EOF) {
- st = r_err(reader, SERD_ERR_BAD_SYNTAX, "end of file in long string\n");
- } else {
+ } else if (c > 0) {
st =
read_character(reader, ref, flags, (uint8_t)eat_byte_safe(reader, c));
+ } else {
+ return r_err(reader, SERD_ERR_BAD_SYNTAX, "end of file in long string\n");
}
}
@@ -735,7 +735,9 @@ read_IRIREF(SerdReader* const reader, Ref* const dest)
reader, SERD_ERR_BAD_SYNTAX, "invalid IRI character '%c'\n", c);
default:
- if (c <= 0x20) {
+ if (c <= 0) {
+ st = r_err(reader, SERD_ERR_BAD_SYNTAX, "unexpected end of file\n");
+ } else if (c <= 0x20) {
st = r_err(reader,
SERD_ERR_BAD_SYNTAX,
"invalid IRI character (escape %%%02X)\n",
@@ -743,8 +745,6 @@ read_IRIREF(SerdReader* const reader, Ref* const dest)
if (!reader->strict) {
st = SERD_FAILURE;
push_byte(reader, *dest, c);
- } else {
- break;
}
} else if (!(c & 0x80)) {
push_byte(reader, *dest, c);