nostrdb/cursor: re-apply infinite loop bug fix
since I keep overwriting it by accident Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
committed by
Daniel D’Aquino
parent
1bc4971111
commit
f7cdc7bc31
@@ -614,39 +614,38 @@ static inline int is_alphanumeric(char c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline int consume_until_boundary(struct cursor *cur) {
|
static inline int consume_until_boundary(struct cursor *cur) {
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
unsigned int char_length = 1;
|
unsigned int char_length = 1;
|
||||||
unsigned int *utf8_char_length = &char_length;
|
unsigned int *utf8_char_length = &char_length;
|
||||||
|
|
||||||
while (cur->p < cur->end) {
|
while (cur->p < cur->end) {
|
||||||
c = *cur->p;
|
c = *cur->p;
|
||||||
|
|
||||||
*utf8_char_length = 1;
|
*utf8_char_length = 1;
|
||||||
|
|
||||||
if (is_whitespace(c))
|
if (is_whitespace(c))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
// Need to check for UTF-8 characters, which can be multiple bytes long
|
// Need to check for UTF-8 characters, which can be multiple bytes long
|
||||||
if (is_utf8_byte(c)) {
|
if (is_utf8_byte(c)) {
|
||||||
if (!parse_utf8_char(cur, &c, utf8_char_length)) {
|
if (!parse_utf8_char(cur, &c, utf8_char_length)) {
|
||||||
if (!is_right_boundary(c)){
|
if (!is_right_boundary(c)){
|
||||||
// TODO: We should work towards handling all UTF-8 characters.
|
return 0;
|
||||||
//printf("Invalid UTF-8 code point: %x\n", c);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
if (is_right_boundary(c))
|
||||||
if (is_right_boundary(c))
|
return 1;
|
||||||
return 1;
|
|
||||||
|
// Need to use a variable character byte length for UTF-8 (2-4 bytes)
|
||||||
// Need to use a variable character byte length for UTF-8 (2-4 bytes)
|
if (cur->p + *utf8_char_length <= cur->end)
|
||||||
if (cur->p + *utf8_char_length <= cur->end)
|
cur->p += *utf8_char_length;
|
||||||
cur->p += *utf8_char_length;
|
else
|
||||||
else
|
cur->p++;
|
||||||
cur->p++;
|
}
|
||||||
}
|
|
||||||
|
return 1;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int consume_until_whitespace(struct cursor *cur, int or_end) {
|
static inline int consume_until_whitespace(struct cursor *cur, int or_end) {
|
||||||
|
|||||||
Reference in New Issue
Block a user