!14 Upgrade package to 3.25.0

From: @cherry530 
Reviewed-by: @caodongxia 
Signed-off-by: @caodongxia
This commit is contained in:
openeuler-ci-bot 2023-04-19 01:45:40 +00:00 committed by Gitee
commit fb9b61fe20
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
4 changed files with 7 additions and 321 deletions

View File

@ -1,251 +0,0 @@
From 0d81a4ce19d599cb0901d78c475286fd854b2724 Mon Sep 17 00:00:00 2001
From: lei_ju <lj3074194431@163.com>
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

View File

@ -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;
}

View File

@ -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 <yaoxin30@h-partners.com> - 3.7.0-5
- Fix CVE-2023-26769