Fix a segmentation fault produced when both 'constraint' and

'translation-details' are used, and no hypothesis that matches the
reference translation is found.
The problem resulted from a missing check if a vector is empty before
incrementing its iterator.


git-svn-id: https://mosesdecoder.svn.sourceforge.net/svnroot/mosesdecoder/trunk@3950 1f5c12ca-751b-0410-a591-d2e778427230
This commit is contained in:
naditomeh 2011-04-17 19:46:46 +00:00
parent a836747b4e
commit 83d02c11c6

View File

@ -16,14 +16,17 @@ void PrintTranslationAnalysis(const TranslationSystem* system, std::ostream &os,
{ {
os << std::endl << "TRANSLATION HYPOTHESIS DETAILS:" << std::endl; os << std::endl << "TRANSLATION HYPOTHESIS DETAILS:" << std::endl;
std::vector<const Hypothesis*> translationPath; std::vector<const Hypothesis*> translationPath;
while (hypo) { while (hypo) {
translationPath.push_back(hypo); translationPath.push_back(hypo);
hypo = hypo->GetPrevHypo(); hypo = hypo->GetPrevHypo();
} }
std::reverse(translationPath.begin(), translationPath.end());
std::reverse(translationPath.begin(), translationPath.end());
std::vector<std::string> droppedWords; std::vector<std::string> droppedWords;
std::vector<const Hypothesis*>::iterator tpi = translationPath.begin(); std::vector<const Hypothesis*>::iterator tpi = translationPath.begin();
if(tpi == translationPath.end())
return;
++tpi; // skip initial translation state ++tpi; // skip initial translation state
std::vector<std::string> sourceMap; std::vector<std::string> sourceMap;
std::vector<std::string> targetMap; std::vector<std::string> targetMap;
@ -39,9 +42,7 @@ void PrintTranslationAnalysis(const TranslationSystem* system, std::ostream &os,
std::string source = (*tpi)->GetSourcePhraseStringRep(); std::string source = (*tpi)->GetSourcePhraseStringRep();
WordsRange twr = (*tpi)->GetCurrTargetWordsRange(); WordsRange twr = (*tpi)->GetCurrTargetWordsRange();
WordsRange swr = (*tpi)->GetCurrSourceWordsRange(); WordsRange swr = (*tpi)->GetCurrSourceWordsRange();
const AlignmentInfo &alignmentInfo = (*tpi)->GetCurrTargetPhrase().GetAlignmentInfo(); const AlignmentInfo &alignmentInfo = (*tpi)->GetCurrTargetPhrase().GetAlignmentInfo();
// language model backoff stats, // language model backoff stats,
if (doLMStats) { if (doLMStats) {
std::vector<std::vector<unsigned int> >& lmstats = *(*tpi)->GetLMStats(); std::vector<std::vector<unsigned int> >& lmstats = *(*tpi)->GetLMStats();
@ -56,7 +57,7 @@ void PrintTranslationAnalysis(const TranslationSystem* system, std::ostream &os,
} }
} }
} }
bool epsilon = false; bool epsilon = false;
if (target == "") { if (target == "") {
target="<EPSILON>"; target="<EPSILON>";