commit 73f6f5c2a6303a7952999d6fc7d85a9126f69c47 Author: Tanmai Khanna Date: Fri Jun 26 16:11:36 2020 +0530 fixed segfaults due to missing tmpblanks diff --git a/apertium/transfer.cc b/apertium/transfer.cc index e450c76..dc42781 100644 --- a/apertium/transfer.cc +++ b/apertium/transfer.cc @@ -2527,7 +2527,14 @@ Transfer::applyRule() } else { - blank[i-1] = new string(UtfConverter::toUtf8(*tmpblank[i-1])); + if(tmpblank.size() < i-1) + { + blank[i-1] = new string(UtfConverter::toUtf8(*tmpblank[i-1])); + } + else + { + blank[i-1] = new string(UtfConverter::toUtf8(L"")); + } } pair tr; @@ -2573,28 +2580,45 @@ Transfer::applyRule() } continue; } - else if(*it == L'[' && *(it+1) == L'[') + else if(*it == L'[') { - while(true) + if(*(it+1) == L'[') //wordbound blank { - if(*it == L'\\') + while(true) { - wblank.push_back(*it); + if(*it == L'\\') + { + wblank.push_back(*it); + it++; + wblank.push_back(*it); + } + else if(*it == L'^' && *(it-1) == L']' && *(it-2) == L']') + { + break; + } + else + { + wblank.push_back(*it); + } + it++; - wblank.push_back(*it); } - else if(*it == L'^' && *(it-1) == L']' && *(it-2) == L']') + } + else + { + if(seenSlash == 0) + { + sl.push_back(*it); + } + else if(seenSlash == 1) { - break; + tl.push_back(*it); } else { - wblank.push_back(*it); + ref.push_back(*it); } - - it++; } - continue; }