summaryrefslogtreecommitdiffstats
path: root/strings
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 13:39:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 13:39:13 +0000
commit86fbb58c3ac0865482819c10a3e81f2eea001c36 (patch)
tree28c9e526ea739c6f9b89e36115e1e2698bddf981 /strings
parentReleasing progress-linux version 1:10.11.6-2~progress7.99u1. (diff)
downloadmariadb-86fbb58c3ac0865482819c10a3e81f2eea001c36.tar.xz
mariadb-86fbb58c3ac0865482819c10a3e81f2eea001c36.zip
Merging upstream version 1:10.11.7.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'strings')
-rw-r--r--strings/ctype-uca.inl14
-rw-r--r--strings/json_lib.c6
2 files changed, 16 insertions, 4 deletions
diff --git a/strings/ctype-uca.inl b/strings/ctype-uca.inl
index 6aa72847..62abbb9b 100644
--- a/strings/ctype-uca.inl
+++ b/strings/ctype-uca.inl
@@ -416,8 +416,20 @@ MY_FUNCTION_NAME(scanner_next_pad_trim)(my_uca_scanner *scanner,
flags & MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES ?
my_space_weight(param->level) : 0;
- res.nchars= 1;
(*generated)++;
+ res.nchars++; /* Count all ignorable characters and the padded space */
+ if (res.nchars > nchars)
+ {
+ /*
+ We scanned a number of ignorable characters at the end of the
+ string and reached the "nchars" limit, so the virtual padded space
+ does not fit. This is possible with CONCAT('a', x'00') with
+ nchars=2 on the second iteration when we scan the x'00'.
+ */
+ if (param->cs->state & MY_CS_NOPAD)
+ res.weight= 0;
+ res.nchars= (uint) nchars;
+ }
}
else if (res.nchars > nchars)
{
diff --git a/strings/json_lib.c b/strings/json_lib.c
index 52c173f3..31d58074 100644
--- a/strings/json_lib.c
+++ b/strings/json_lib.c
@@ -482,12 +482,12 @@ enum json_num_states {
static int json_num_states[NS_NUM_STATES][N_NUM_CLASSES]=
{
-/* - + 0 1..9 POINT E END_OK ERROR */
+/* - + 0 1..9 POINT E END_OK ERROR */
/*OK*/ { JE_SYN, JE_SYN, JE_SYN, JE_SYN, JE_SYN, JE_SYN, JE_SYN, JE_BAD_CHR },
/*GO*/ { NS_GO1, JE_SYN, NS_Z, NS_INT, JE_SYN, JE_SYN, JE_SYN, JE_BAD_CHR },
/*GO1*/ { JE_SYN, JE_SYN, NS_Z1, NS_INT, JE_SYN, JE_SYN, JE_SYN, JE_BAD_CHR },
-/*ZERO*/ { JE_SYN, JE_SYN, JE_SYN, JE_SYN, NS_FRAC, JE_SYN, NS_OK, JE_BAD_CHR },
-/*ZE1*/ { JE_SYN, JE_SYN, JE_SYN, JE_SYN, NS_FRAC, JE_SYN, NS_OK, JE_BAD_CHR },
+/*ZERO*/ { JE_SYN, JE_SYN, JE_SYN, JE_SYN, NS_FRAC, NS_EX, NS_OK, JE_BAD_CHR },
+/*ZE1*/ { JE_SYN, JE_SYN, JE_SYN, JE_SYN, NS_FRAC, NS_EX, NS_OK, JE_BAD_CHR },
/*INT*/ { JE_SYN, JE_SYN, NS_INT, NS_INT, NS_FRAC, NS_EX, NS_OK, JE_BAD_CHR },
/*FRAC*/ { JE_SYN, JE_SYN, NS_FRAC, NS_FRAC,JE_SYN, NS_EX, NS_OK, JE_BAD_CHR },
/*EX*/ { NS_EX, NS_EX, NS_EX1, NS_EX1, JE_SYN, JE_SYN, JE_SYN, JE_BAD_CHR },