Add yaml file and Fixs memory issue introduced with gcc9
This commit is contained in:
parent
2b7168657b
commit
d889ba0248
251
0001-fix-memory-issue-introduced-with-GCC9.patch
Normal file
251
0001-fix-memory-issue-introduced-with-GCC9.patch
Normal file
@ -0,0 +1,251 @@
|
||||
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
|
||||
|
||||
@ -2,11 +2,12 @@
|
||||
|
||||
Name: liblouis
|
||||
Version: 3.7.0
|
||||
Release: 2
|
||||
Release: 3
|
||||
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
|
||||
BuildRequires: chrpath gcc help2man texinfo texinfo-tex texlive-eurosym
|
||||
BuildRequires: texlive-xetex python2-devel python3-devel
|
||||
Provides: bundled(gnulib) = 20130621
|
||||
@ -133,5 +134,8 @@ done
|
||||
%{python3_sitelib}/louis/
|
||||
|
||||
%changelog
|
||||
* Thu May 21 2020 yanan li <liyanan032@huawei.com> - 3.7.0-3
|
||||
- Fixed memory leaks created by block scope compound literals.
|
||||
|
||||
* Thu Nov 28 2019 liujing<liujing144@huawei.com> - 3.7.0-2
|
||||
- Package init
|
||||
|
||||
4
liblouis.yaml
Normal file
4
liblouis.yaml
Normal file
@ -0,0 +1,4 @@
|
||||
version_control: github
|
||||
src_repo: liblouis/liblouis
|
||||
tag_prefix: ^v
|
||||
seperator: .
|
||||
Loading…
x
Reference in New Issue
Block a user