From daad571338123052e0466c3e59cb183fe12aeb67 Mon Sep 17 00:00:00 2001 From: Takuji Tanaka Date: Wed, 25 Aug 2021 13:55:11 +0000 Subject: upmendex: initialize string, check malformed input git-svn-id: svn://tug.org/texlive/trunk@60319 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/upmendex/ChangeLog | 7 +++++++ Build/source/texk/upmendex/sort.c | 23 ++++++++++++++++------- Build/source/texk/upmendex/tests/rule3.ist | 4 ++++ Build/source/texk/upmendex/tests/rule4.ist | 4 ++++ Build/source/texk/upmendex/tests/upmendex.test | 19 +++++++++++++++++++ 5 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 Build/source/texk/upmendex/tests/rule3.ist create mode 100644 Build/source/texk/upmendex/tests/rule4.ist (limited to 'Build/source') diff --git a/Build/source/texk/upmendex/ChangeLog b/Build/source/texk/upmendex/ChangeLog index a613c67f878..9bbb750dfda 100644 --- a/Build/source/texk/upmendex/ChangeLog +++ b/Build/source/texk/upmendex/ChangeLog @@ -1,3 +1,10 @@ +2021-08-25 TANAKA Takuji + + * sort.c: + Initialize a string. Check malformed input for "icu_rules". + * tests/upmendex.test, tests/rule[34].ist: + Add new tests. + 2021-08-23 TANAKA Takuji * tests/upmendex.test, tests/rule[12].ist, tests/rule.{idx,ind}: diff --git a/Build/source/texk/upmendex/sort.c b/Build/source/texk/upmendex/sort.c index e3a47c12b72..38b64feeebc 100644 --- a/Build/source/texk/upmendex/sort.c +++ b/Build/source/texk/upmendex/sort.c @@ -17,7 +17,7 @@ void wsort(struct index *ind, int num) { int i,order; UErrorCode status; - UChar rules[STYBUFSIZE]; + UChar rules[STYBUFSIZE] = {'\0'}; for (order=1,i=0;;i++) { switch (character_order[i]) { @@ -324,10 +324,11 @@ static int get_charset_juncture(UChar *str) } } -static int unescape(const unsigned char *src, UChar *dist) +static int unescape(const unsigned char *src, UChar *dest) { - int i,j,k; + int i,j,k,ret; char tmp[STYBUFSIZE]; + UErrorCode status; for (i=j=0;i=0x80 || src[i+1]=='\0')) { strncpy(tmp,(char *)&src[j],i-j+1); tmp[i-j+1]='\0'; - k=u_strlen(dist); - u_unescape(tmp, &dist[k], STYBUFSIZE-k); + k=u_strlen(dest); + ret=u_unescape(tmp, &dest[k], STYBUFSIZE-k); + if (ret==0) { + verb_printf(efp, "\n[ICU] Escape sequence in input seems malformed.\n"); + exit(254); + } j=i+1; } else if (src[i]>=0x80 && (src[i+1]< 0x80 || src[i+1]=='\0')) { strncpy(tmp,(char *)&src[j],i-j+1); tmp[i-j+1]='\0'; - k=u_strlen(dist); - multibyte_to_widechar(&dist[k], STYBUFSIZE-k, tmp); + k=u_strlen(dest); + u_strFromUTF8(&dest[k], STYBUFSIZE-k, NULL, tmp, -1, &status); + if (U_FAILURE(status)) { + verb_printf(efp, "\n[ICU] Input string seems malformed.: %s\n", u_errorName(status)); + exit(254); + } j=i+1; } } diff --git a/Build/source/texk/upmendex/tests/rule3.ist b/Build/source/texk/upmendex/tests/rule3.ist new file mode 100644 index 00000000000..7ab835a8016 --- /dev/null +++ b/Build/source/texk/upmendex/tests/rule3.ist @@ -0,0 +1,4 @@ +% -*- coding: latin-1 -*- +% To test malformed input + +icu_rules "&a<<