diff options
author | David Robillard <d@drobilla.net> | 2022-11-24 16:40:49 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2022-11-24 16:40:49 -0500 |
commit | f2ea3154a742238f0b9943bb58efd0627ffda3e8 (patch) | |
tree | 0da78eafde795ef26068ea606314ef45d2013cdc /src | |
parent | 055735f696138614d51e92f1152bb02f0cfbefe0 (diff) | |
download | serd-f2ea3154a742238f0b9943bb58efd0627ffda3e8.tar.gz serd-f2ea3154a742238f0b9943bb58efd0627ffda3e8.tar.bz2 serd-f2ea3154a742238f0b9943bb58efd0627ffda3e8.zip |
Gracefully handle bad characters in Turtle blank node syntax
Diffstat (limited to 'src')
-rw-r--r-- | src/attributes.h | 6 | ||||
-rw-r--r-- | src/n3.c | 4 | ||||
-rw-r--r-- | src/reader.h | 3 |
3 files changed, 11 insertions, 2 deletions
diff --git a/src/attributes.h b/src/attributes.h index 25eb91d0..502634b0 100644 --- a/src/attributes.h +++ b/src/attributes.h @@ -10,4 +10,10 @@ # define SERD_MALLOC_FUNC #endif +#ifdef __GNUC__ +# define SERD_NODISCARD __attribute__((warn_unused_result)) +#else +# define SERD_NODISCARD +#endif + #endif // SERD_ATTRIBUTES_H @@ -997,7 +997,9 @@ read_BLANK_NODE_LABEL(SerdReader* const reader, bool* const ate_dot) { eat_byte_safe(reader, '_'); - eat_byte_check(reader, ':'); + if (!eat_byte_check(reader, ':')) { + return SERD_ERR_BAD_SYNTAX; + } const Ref ref = *dest = push_node(reader, diff --git a/src/reader.h b/src/reader.h index 689eeecb..cccaa8a9 100644 --- a/src/reader.h +++ b/src/reader.h @@ -4,6 +4,7 @@ #ifndef SERD_READER_H #define SERD_READER_H +#include "attributes.h" #include "byte_source.h" #include "stack.h" @@ -131,7 +132,7 @@ eat_byte_safe(SerdReader* reader, const int byte) return c; } -static inline int +static inline int SERD_NODISCARD eat_byte_check(SerdReader* reader, const int byte) { const int c = peek_byte(reader); |