diff --git a/0001-fix-memory-issue-introduced-with-GCC9.patch b/0001-fix-memory-issue-introduced-with-GCC9.patch deleted file mode 100644 index 1f2c953..0000000 --- a/0001-fix-memory-issue-introduced-with-GCC9.patch +++ /dev/null @@ -1,251 +0,0 @@ -From 0d81a4ce19d599cb0901d78c475286fd854b2724 Mon Sep 17 00:00:00 2001 -From: lei_ju -Date: Thu, 21 May 2020 17:07:49 +0800 -Subject: [PATCH] fix memory issue introduced with GCC9 - - -diff --git a/liblouis/lou_backTranslateString.c b/liblouis/lou_backTranslateString.c -index 5791994..b459c3a 100644 ---- a/liblouis/lou_backTranslateString.c -+++ b/liblouis/lou_backTranslateString.c -@@ -149,7 +149,7 @@ _lou_backTranslateWithTracing(const char *tableList, const widechar *inbuf, int - widechar *outbuf, int *outlen, formtype *typeform, char *spacing, int *outputPos, - int *inputPos, int *cursorPos, int mode, const TranslationTableRule **rules, - int *rulesLen) { -- const InString *input; -+ InString input; - OutString output; - unsigned char *typebuf = NULL; - char *spacebuf; -@@ -192,7 +192,7 @@ _lou_backTranslateWithTracing(const char *tableList, const widechar *inbuf, int - else - passbuf1[k] = _lou_getDotsForChar(inbuf[k]); - passbuf1[srcmax] = _lou_getDotsForChar(' '); -- input = &(InString){.chars = passbuf1, .length = srcmax, .bufferIndex = idx }; -+ input = (InString){.chars = passbuf1, .length = srcmax, .bufferIndex = idx }; - } - idx = getStringBuffer(*outlen); - output = (OutString){.chars = stringBufferPool->buffers[idx], -@@ -202,7 +202,7 @@ _lou_backTranslateWithTracing(const char *tableList, const widechar *inbuf, int - typebuf = (unsigned char *)typeform; - spacebuf = spacing; - if (outputPos != NULL) -- for (k = 0; k < input->length; k++) outputPos[k] = -1; -+ for (k = 0; k < input.length; k++) outputPos[k] = -1; - if (cursorPos != NULL) - cursorPosition = *cursorPos; - else -@@ -210,12 +210,12 @@ _lou_backTranslateWithTracing(const char *tableList, const widechar *inbuf, int - cursorStatus = 0; - if (typebuf != NULL) memset(typebuf, '0', *outlen); - if (spacebuf != NULL) memset(spacebuf, '*', *outlen); -- if (!(posMapping1 = _lou_allocMem(alloc_posMapping1, 0, input->length, *outlen))) -+ if (!(posMapping1 = _lou_allocMem(alloc_posMapping1, 0, input.length, *outlen))) - return 0; - if (table->numPasses > 1 || table->corrections) { -- if (!(posMapping2 = _lou_allocMem(alloc_posMapping2, 0, input->length, *outlen))) -+ if (!(posMapping2 = _lou_allocMem(alloc_posMapping2, 0, input.length, *outlen))) - return 0; -- if (!(posMapping3 = _lou_allocMem(alloc_posMapping3, 0, input->length, *outlen))) -+ if (!(posMapping3 = _lou_allocMem(alloc_posMapping3, 0, input.length, *outlen))) - return 0; - } - appliedRulesCount = 0; -@@ -239,17 +239,17 @@ _lou_backTranslateWithTracing(const char *tableList, const widechar *inbuf, int - int realInlen; - switch (currentPass) { - case 1: -- goodTrans = backTranslateString(table, mode, currentPass, input, &output, -+ goodTrans = backTranslateString(table, mode, currentPass, &input, &output, - spacebuf, passPosMapping, &realInlen, &cursorPosition, &cursorStatus, - appliedRules, &appliedRulesCount, maxAppliedRules); - break; - case 0: -- goodTrans = makeCorrections(table, mode, currentPass, input, &output, -+ goodTrans = makeCorrections(table, mode, currentPass, &input, &output, - passPosMapping, &realInlen, &cursorPosition, &cursorStatus, - appliedRules, &appliedRulesCount, maxAppliedRules); - break; - default: -- goodTrans = translatePass(table, mode, currentPass, input, &output, -+ goodTrans = translatePass(table, mode, currentPass, &input, &output, - passPosMapping, &realInlen, &cursorPosition, &cursorStatus, - appliedRules, &appliedRulesCount, maxAppliedRules); - break; -@@ -273,8 +273,8 @@ _lou_backTranslateWithTracing(const char *tableList, const widechar *inbuf, int - } - currentPass--; - if (currentPass >= lastPass && goodTrans) { -- releaseStringBuffer(input->bufferIndex); -- input = &(InString){.chars = output.chars, -+ releaseStringBuffer(input.bufferIndex); -+ input = (InString){.chars = output.chars, - .length = output.length, - .bufferIndex = output.bufferIndex }; - idx = getStringBuffer(*outlen); -diff --git a/liblouis/lou_translateString.c b/liblouis/lou_translateString.c -index 7c207f4..c623714 100644 ---- a/liblouis/lou_translateString.c -+++ b/liblouis/lou_translateString.c -@@ -495,9 +495,11 @@ replaceGrouping(const TranslationTableHeader *table, const InString **input, - memcpy(chars, (*input)->chars, (*input)->length * sizeof(widechar)); - chars[startReplace] = replaceStart; - chars[p] = replaceEnd; -- *input = &(InString){ -+ static InString stringStore; -+ stringStore = (InString){ - .chars = chars, .length = (*input)->length, .bufferIndex = idx - }; -+ *input = &stringStore; - } - } else { - if (transOpcode == CTO_Context) { -@@ -546,7 +548,9 @@ removeGrouping(const InString **input, OutString *output, int passCharDots, - if (k == p) continue; - chars[len++] = (*input)->chars[k]; - } -- *input = &(InString){.chars = chars, .length = len, .bufferIndex = idx }; -+ static InString stringStore; -+ stringStore = (InString){.chars = chars, .length = len, .bufferIndex = idx }; -+ *input = &stringStore; - } - } else { - for (p = output->length - 1; p >= 0; p--) { -@@ -1091,7 +1095,7 @@ _lou_translateWithTracing(const char *tableList, const widechar *inbufx, int *in - // *outlen = i; - // return 1; - const TranslationTableHeader *table; -- const InString *input; -+ InString input; - OutString output; - // posMapping contains position mapping info between the initial input and the output - // of the current pass. It is 1 longer than the output. The values are monotonically -@@ -1131,23 +1135,23 @@ _lou_translateWithTracing(const char *tableList, const widechar *inbufx, int *in - if (table == NULL || *inlen < 0 || *outlen < 0) return 0; - k = 0; - while (k < *inlen && inbufx[k]) k++; -- input = &(InString){.chars = inbufx, .length = k, .bufferIndex = -1 }; -+ input = (InString){.chars = inbufx, .length = k, .bufferIndex = -1 }; - haveEmphasis = 0; -- if (!(typebuf = _lou_allocMem(alloc_typebuf, 0, input->length, *outlen))) return 0; -+ if (!(typebuf = _lou_allocMem(alloc_typebuf, 0, input.length, *outlen))) return 0; - if (typeform != NULL) { -- for (k = 0; k < input->length; k++) { -+ for (k = 0; k < input.length; k++) { - typebuf[k] = typeform[k]; - if (typebuf[k] & EMPHASIS) haveEmphasis = 1; - } - } else -- memset(typebuf, 0, input->length * sizeof(formtype)); -+ memset(typebuf, 0, input.length * sizeof(formtype)); - -- if ((wordBuffer = _lou_allocMem(alloc_wordBuffer, 0, input->length, *outlen))) -- memset(wordBuffer, 0, (input->length + 4) * sizeof(unsigned int)); -+ if ((wordBuffer = _lou_allocMem(alloc_wordBuffer, 0, input.length, *outlen))) -+ memset(wordBuffer, 0, (input.length + 4) * sizeof(unsigned int)); - else - return 0; -- if ((emphasisBuffer = _lou_allocMem(alloc_emphasisBuffer, 0, input->length, *outlen))) -- memset(emphasisBuffer, 0, (input->length + 4) * sizeof(EmphasisInfo)); -+ if ((emphasisBuffer = _lou_allocMem(alloc_emphasisBuffer, 0, input.length, *outlen))) -+ memset(emphasisBuffer, 0, (input.length + 4) * sizeof(EmphasisInfo)); - else - return 0; - -@@ -1156,23 +1160,23 @@ _lou_translateWithTracing(const char *tableList, const widechar *inbufx, int *in - else - srcSpacing = NULL; - if (outputPos != NULL) -- for (k = 0; k < input->length; k++) outputPos[k] = -1; -+ for (k = 0; k < input.length; k++) outputPos[k] = -1; - if (cursorPos != NULL && *cursorPos >= 0) { - cursorStatus = 0; - cursorPosition = *cursorPos; - if ((mode & (compbrlAtCursor | compbrlLeftCursor))) { - compbrlStart = cursorPosition; -- if (checkAttr(input->chars[compbrlStart], CTC_Space, 0, table)) -+ if (checkAttr(input.chars[compbrlStart], CTC_Space, 0, table)) - compbrlEnd = compbrlStart + 1; - else { - while (compbrlStart >= 0 && -- !checkAttr(input->chars[compbrlStart], CTC_Space, 0, table)) -+ !checkAttr(input.chars[compbrlStart], CTC_Space, 0, table)) - compbrlStart--; - compbrlStart++; - compbrlEnd = cursorPosition; - if (!(mode & compbrlLeftCursor)) -- while (compbrlEnd < input->length && -- !checkAttr(input->chars[compbrlEnd], CTC_Space, 0, table)) -+ while (compbrlEnd < input.length && -+ !checkAttr(input.chars[compbrlEnd], CTC_Space, 0, table)) - compbrlEnd++; - } - } -@@ -1180,16 +1184,16 @@ _lou_translateWithTracing(const char *tableList, const widechar *inbufx, int *in - cursorPosition = -1; - cursorStatus = 1; /* so it won't check cursor position */ - } -- if (!(posMapping1 = _lou_allocMem(alloc_posMapping1, 0, input->length, *outlen))) -+ if (!(posMapping1 = _lou_allocMem(alloc_posMapping1, 0, input.length, *outlen))) - return 0; - if (table->numPasses > 1 || table->corrections) { -- if (!(posMapping2 = _lou_allocMem(alloc_posMapping2, 0, input->length, *outlen))) -+ if (!(posMapping2 = _lou_allocMem(alloc_posMapping2, 0, input.length, *outlen))) - return 0; -- if (!(posMapping3 = _lou_allocMem(alloc_posMapping3, 0, input->length, *outlen))) -+ if (!(posMapping3 = _lou_allocMem(alloc_posMapping3, 0, input.length, *outlen))) - return 0; - } - if (srcSpacing != NULL) { -- if (!(destSpacing = _lou_allocMem(alloc_destSpacing, 0, input->length, *outlen))) -+ if (!(destSpacing = _lou_allocMem(alloc_destSpacing, 0, input.length, *outlen))) - goodTrans = 0; - else - memset(destSpacing, '*', *outlen); -@@ -1221,18 +1225,18 @@ _lou_translateWithTracing(const char *tableList, const widechar *inbufx, int *in - int realInlen; - switch (currentPass) { - case 0: -- goodTrans = makeCorrections(table, input, &output, passPosMapping, typebuf, -+ goodTrans = makeCorrections(table, &input, &output, passPosMapping, typebuf, - &realInlen, &posIncremented, &cursorPosition, &cursorStatus); - break; - case 1: { -- goodTrans = translateString(table, mode, currentPass, input, &output, -+ goodTrans = translateString(table, mode, currentPass, &input, &output, - passPosMapping, typebuf, srcSpacing, destSpacing, wordBuffer, - emphasisBuffer, haveEmphasis, &realInlen, &posIncremented, - &cursorPosition, &cursorStatus, compbrlStart, compbrlEnd); - break; - } - default: -- goodTrans = translatePass(table, currentPass, input, &output, passPosMapping, -+ goodTrans = translatePass(table, currentPass, &input, &output, passPosMapping, - &realInlen, &posIncremented, &cursorPosition, &cursorStatus); - break; - } -@@ -1251,8 +1255,8 @@ _lou_translateWithTracing(const char *tableList, const widechar *inbufx, int *in - currentPass++; - if (currentPass <= table->numPasses && goodTrans) { - int idx; -- releaseStringBuffer(input->bufferIndex); -- input = &(InString){.chars = output.chars, -+ releaseStringBuffer(input.bufferIndex); -+ input = (InString){.chars = output.chars, - .length = output.length, - .bufferIndex = output.bufferIndex }; - idx = getStringBuffer(*outlen); -@@ -1310,8 +1314,8 @@ _lou_translateWithTracing(const char *tableList, const widechar *inbufx, int *in - } - } - if (destSpacing != NULL) { -- memcpy(srcSpacing, destSpacing, input->length); -- srcSpacing[input->length] = 0; -+ memcpy(srcSpacing, destSpacing, input.length); -+ srcSpacing[input.length] = 0; - } - if (cursorPos != NULL && *cursorPos != -1) { - if (outputPos != NULL) --- -2.23.0 - diff --git a/CVE-2023-26769.patch b/CVE-2023-26769.patch deleted file mode 100644 index b45eede..0000000 --- a/CVE-2023-26769.patch +++ /dev/null @@ -1,65 +0,0 @@ -diff -Naur a/liblouis/compileTranslationTable.c b/liblouis/compileTranslationTable.c ---- a/liblouis/compileTranslationTable.c 2023-03-22 17:59:25.331813368 +0800 -+++ b/liblouis/compileTranslationTable.c 2023-03-22 18:05:57.089522644 +0800 -@@ -3628,18 +3628,21 @@ - char *tableFile; - static struct stat info; - -+#define MAX_TABLEFILE_SIZE (MAXSTRING * sizeof(char) * 2) - if (table == NULL || table[0] == '\0') return NULL; -- tableFile = (char *)malloc(MAXSTRING * sizeof(char) * 2); -+ tableFile = (char *)malloc(MAX_TABLEFILE_SIZE); - - // - // First try to resolve against base - // - if (base) { - int k; -+ if (strlen(base) >= MAX_TABLEFILE_SIZE) goto failure; - strcpy(tableFile, base); - k = (int)strlen(tableFile); - while (k >= 0 && tableFile[k] != '/' && tableFile[k] != '\\') k--; - tableFile[++k] = '\0'; -+ if (strlen(tableFile) + strlen(table) >= MAX_TABLEFILE_SIZE) goto failure; - strcat(tableFile, table); - if (stat(tableFile, &info) == 0 && !(info.st_mode & S_IFDIR)) { - _lou_logMessage(LOG_DEBUG, "found table %s", tableFile); -@@ -3651,6 +3654,7 @@ - // It could be an absolute path, or a path relative to the current working - // directory - // -+ if (strlen(table) >= MAX_TABLEFILE_SIZE) goto failure; - strcpy(tableFile, table); - if (stat(tableFile, &info) == 0 && !(info.st_mode & S_IFDIR)) { - _lou_logMessage(LOG_DEBUG, "found table %s", tableFile); -@@ -3671,6 +3675,10 @@ - last = (*cp == '\0'); - *cp = '\0'; - if (dir == cp) dir = "."; -+ if (strlen(dir) + strlen(table) + 1 >= MAX_TABLEFILE_SIZE) { -+ free(searchPath_copy); -+ goto failure; -+ } - sprintf(tableFile, "%s%c%s", dir, DIR_SEP, table); - if (stat(tableFile, &info) == 0 && !(info.st_mode & S_IFDIR)) { - _lou_logMessage(LOG_DEBUG, "found table %s", tableFile); -@@ -3678,6 +3686,11 @@ - return tableFile; - } - if (last) break; -+ if (strlen(dir) + strlen("liblouis") + strlen("tables") + strlen(table) + 3 >= -+ MAX_TABLEFILE_SIZE) { -+ free(searchPath_copy); -+ goto failure; -+ } - sprintf(tableFile, "%s%c%s%c%s%c%s", dir, DIR_SEP, "liblouis", DIR_SEP, - "tables", DIR_SEP, table); - if (stat(tableFile, &info) == 0 && !(info.st_mode & S_IFDIR)) { -@@ -3689,6 +3702,7 @@ - } - free(searchPath_copy); - } -+failure: - free(tableFile); - return NULL; - } diff --git a/liblouis-3.7.0.tar.gz b/liblouis-3.25.0.tar.gz similarity index 56% rename from liblouis-3.7.0.tar.gz rename to liblouis-3.25.0.tar.gz index ed63d36..b7d5fb0 100644 Binary files a/liblouis-3.7.0.tar.gz and b/liblouis-3.25.0.tar.gz differ diff --git a/liblouis.spec b/liblouis.spec index f9c0cea..bda8667 100644 --- a/liblouis.spec +++ b/liblouis.spec @@ -1,15 +1,13 @@ %global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g') Name: liblouis -Version: 3.7.0 -Release: 5 +Version: 3.25.0 +Release: 1 Summary: Braille translation and back-translation library License: LGPLv3+ and GPLv3+ URL: http://liblouis.org Source0: https://github.com/%{name}/%{name}/releases/download/v%{version}/%{name}-%{version}.tar.gz -Patch0000: 0001-fix-memory-issue-introduced-with-GCC9.patch -Patch0001: CVE-2023-26769.patch -BuildRequires: chrpath gcc help2man texinfo texinfo-tex texlive-eurosym +BuildRequires: chrpath gcc help2man texinfo texinfo-tex texlive-eurosym texlive-ec BuildRequires: texlive-xetex python3-devel Provides: bundled(gnulib) = 20130621 @@ -61,6 +59,7 @@ This package provides Python 3 language bindings for %{name}. %prep %autosetup -p1 +chmod 664 tables/* %build %configure --disable-static --enable-ucs4 @@ -116,6 +115,9 @@ done %{python3_sitelib}/louis/ %changelog +* Wed Apr 19 2023 xu_ping <707078654@qq.com> - 3.25.0-1 +- Upgrade package to 3.25.0 version + * Wed Mar 22 2023 yaoxin - 3.7.0-5 - Fix CVE-2023-26769