mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
MDEV-23187: Assorted assertion failures in json_find_path with certain
collations Fix by Alexey Botchkov The 'value_len' is calculated wrong for the multibyte charsets. In the read_strn() function we get the length of the string with the final ' " ' character. So have to subtract it's length from the value_len. And the length of '1' isn't correct for the ucs2 charset (must be 2).
This commit is contained in:
@@ -35,6 +35,7 @@ typedef struct st_json_string_t
|
||||
const uchar *c_str; /* Current position in JSON string */
|
||||
const uchar *str_end; /* The end on the string. */
|
||||
my_wc_t c_next; /* UNICODE of the last read character */
|
||||
int c_next_len; /* character lenght of the last read character. */
|
||||
int error; /* error code. */
|
||||
|
||||
CHARSET_INFO *cs; /* Character set of the JSON string. */
|
||||
@@ -48,7 +49,7 @@ void json_string_set_cs(json_string_t *s, CHARSET_INFO *i_cs);
|
||||
void json_string_set_str(json_string_t *s,
|
||||
const uchar *str, const uchar *end);
|
||||
#define json_next_char(j) \
|
||||
(j)->wc((j)->cs, &(j)->c_next, (j)->c_str, (j)->str_end)
|
||||
((j)->c_next_len= (j)->wc((j)->cs, &(j)->c_next, (j)->c_str, (j)->str_end))
|
||||
#define json_eos(j) ((j)->c_str >= (j)->str_end)
|
||||
/*
|
||||
read_string_const_chr() reads the next character of the string constant
|
||||
|
Reference in New Issue
Block a user