From d889ba024876cefe83b81b3b21cbb79d24d5e4b8 Mon Sep 17 00:00:00 2001 From: lyn1001 Date: Thu, 21 May 2020 17:44:34 +0800 Subject: [PATCH] Add yaml file and Fixs memory issue introduced with gcc9 --- ...ix-memory-issue-introduced-with-GCC9.patch | 251 ++++++++++++++++++ liblouis.spec | 6 +- liblouis.yaml | 4 + 3 files changed, 260 insertions(+), 1 deletion(-) create mode 100644 0001-fix-memory-issue-introduced-with-GCC9.patch create mode 100644 liblouis.yaml diff --git a/0001-fix-memory-issue-introduced-with-GCC9.patch b/0001-fix-memory-issue-introduced-with-GCC9.patch new file mode 100644 index 0000000..1f2c953 --- /dev/null +++ b/0001-fix-memory-issue-introduced-with-GCC9.patch @@ -0,0 +1,251 @@ +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/liblouis.spec b/liblouis.spec index 53432f6..c9da875 100644 --- a/liblouis.spec +++ b/liblouis.spec @@ -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 - 3.7.0-3 +- Fixed memory leaks created by block scope compound literals. + * Thu Nov 28 2019 liujing - 3.7.0-2 - Package init diff --git a/liblouis.yaml b/liblouis.yaml new file mode 100644 index 0000000..302952f --- /dev/null +++ b/liblouis.yaml @@ -0,0 +1,4 @@ +version_control: github +src_repo: liblouis/liblouis +tag_prefix: ^v +seperator: . \ No newline at end of file -- Gitee