aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2025-02-25 09:56:01 -0500
committerDavid Robillard <d@drobilla.net>2025-03-16 20:22:36 -0400
commite0c3ff08acbc25040e73838770435e1d2a89265e (patch)
treeea28a29a85f74b8d42bf41cff7230c6fa595fbfa /src
parent5ecac71066475b2bb55758ae138afeebeaa5b948 (diff)
downloadserd-e0c3ff08acbc25040e73838770435e1d2a89265e.tar.gz
serd-e0c3ff08acbc25040e73838770435e1d2a89265e.tar.bz2
serd-e0c3ff08acbc25040e73838770435e1d2a89265e.zip
Fix reading numbers with no space before the final dot
Diffstat (limited to 'src')
-rw-r--r--src/n3.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/n3.c b/src/n3.c
index 9750532b..cd77eb3b 100644
--- a/src/n3.c
+++ b/src/n3.c
@@ -814,18 +814,16 @@ read_number(SerdReader* const reader,
// all other cases ::= ( '-' | '+' ) [0-9]+ ( . )? ( [0-9]+ )? ...
TRY(st, read_0_9(reader, *dest, true));
if ((c = peek_byte(reader)) == '.') {
- has_decimal = true;
-
// Annoyingly, dot can be end of statement, so tentatively eat
skip_byte(reader, c);
c = peek_byte(reader);
if (!is_digit(c) && c != 'e' && c != 'E') {
- *ate_dot = true; // Force caller to deal with stupid grammar
- return SERD_SUCCESS; // Next byte is not a number character
+ *ate_dot = true; // Force caller to deal with silly grammar
+ } else {
+ has_decimal = true;
+ push_byte(reader, *dest, '.');
+ read_0_9(reader, *dest, false);
}
-
- push_byte(reader, *dest, '.');
- read_0_9(reader, *dest, false);
}
}
c = peek_byte(reader);