From f124a075ccc31285250872f93e9ff16ea865d4eb Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 8 Mar 2018 15:43:40 -0500 Subject: Fix parsing local names that end with escaped dots --- src/n3.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/n3.c b/src/n3.c index 0c78de1e..b35031bb 100644 --- a/src/n3.c +++ b/src/n3.c @@ -495,8 +495,9 @@ read_PLX(SerdReader* reader, Ref dest) static SerdStatus read_PN_LOCAL(SerdReader* reader, Ref dest, bool* ate_dot) { - uint8_t c = peek_byte(reader); - SerdStatus st = SERD_SUCCESS; + uint8_t c = peek_byte(reader); + SerdStatus st = SERD_SUCCESS; + bool trailing_unescaped_dot = false; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case '_': @@ -518,10 +519,11 @@ read_PN_LOCAL(SerdReader* reader, Ref dest, bool* ate_dot) } else if (st != SERD_SUCCESS && (st = read_PN_CHARS(reader, dest))) { break; } + trailing_unescaped_dot = (c == '.'); } SerdNode* const n = deref(reader, dest); - if (n->buf[n->n_bytes - 1] == '.') { + if (trailing_unescaped_dot) { // Ate trailing dot, pop it from stack/node and inform caller --n->n_bytes; serd_stack_pop(&reader->stack, 1); -- cgit v1.2.1