From 6a26b026063214a25d1b80fe1b91f67a911ec7af Mon Sep 17 00:00:00 2001 From: Liang Chang Date: Mon, 17 May 2021 01:07:55 +0800 Subject: [PATCH] DtHelp: Fix a multibyte character parsing issue. --- cde/lib/DtHelp/FormatSDL.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/cde/lib/DtHelp/FormatSDL.c b/cde/lib/DtHelp/FormatSDL.c index 54bddcbda..6d854ed19 100644 --- a/cde/lib/DtHelp/FormatSDL.c +++ b/cde/lib/DtHelp/FormatSDL.c @@ -7272,25 +7272,22 @@ Cdata( /* * must finish up the character */ - int len = i + 1; + int len = 0; + myLen = strlen(string); - while (curLen < 0 && len - i < multiLen) - { - if (myLen <= len) - { - string = (char *) realloc(string, myLen + multiLen + 1); - if (string == NULL) - return -1; - myLen += multiLen; - } + string = (char *) realloc(string, myLen + multiLen + 1); + if (string == NULL) return -1; - string[len] = BufFileGet(my_struct->my_file); - if (string[len++] == BUFFILEEOF) - return -1; + while (curLen < 0 && len < multiLen) { + string[myLen] = BufFileGet(my_struct->my_file); - string[len] = '\0'; - curLen = mblen (&string[i], multiLen); - } + if (string[myLen] == BUFFILEEOF) return -1; + + string[myLen + 1] = '\0'; + curLen = mblen(&string[i], multiLen); + ++len; + ++myLen; + } if (curLen < 0) return -1;