From 653a2a8b123b79835af9f684f8b92ef7f88712aa Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Sat, 19 Apr 2014 16:27:11 +0200 Subject: Bug 728530 - Crash on \addindex \term --- src/htmldocvisitor.cpp | 43 +++++++++++++++++++++++-------------------- src/latexdocvisitor.cpp | 46 ++++++++++++++++++++++++++-------------------- 2 files changed, 49 insertions(+), 40 deletions(-) diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index 9939ef2..c70f2c5 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -44,27 +44,30 @@ static QCString convertIndexWordToAnchor(const QString &word) QCString result; const char *str = word.data(); unsigned char c; - while ((c = *str++)) - { - if ((c >= 'a' && c <= 'z') || // ALPHA - (c >= 'A' && c <= 'A') || // ALPHA - (c >= '0' && c <= '9') || // DIGIT - c == '-' || - c == '.' || - c == '_' || - c == '~' - ) - { - result += c; - } - else + if (str) + { + while ((c = *str++)) { - char enc[4]; - enc[0] = '%'; - enc[1] = hex[(c & 0xf0) >> 4]; - enc[2] = hex[c & 0xf]; - enc[3] = 0; - result += enc; + if ((c >= 'a' && c <= 'z') || // ALPHA + (c >= 'A' && c <= 'A') || // ALPHA + (c >= '0' && c <= '9') || // DIGIT + c == '-' || + c == '.' || + c == '_' || + c == '~' + ) + { + result += c; + } + else + { + char enc[4]; + enc[0] = '%'; + enc[1] = hex[(c & 0xf0) >> 4]; + enc[2] = hex[c & 0xf]; + enc[3] = 0; + result += enc; + } } } return result; diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 68f0f06..eed36bc 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -38,17 +38,20 @@ static QCString escapeLabelName(const char *s) QCString result; const char *p=s; char c; - while ((c=*p++)) + if (p) { - switch (c) + while ((c=*p++)) { - case '%': result+="\\%"; break; - case '|': result+="\\texttt{\"|}"; break; - case '!': result+="\"!"; break; - case '{': result+="\\lcurly{}"; break; - case '}': result+="\\rcurly{}"; break; - case '~': result+="````~"; break; // to get it a bit better in index together with other special characters - default: result+=c; + switch (c) + { + case '%': result+="\\%"; break; + case '|': result+="\\texttt{\"|}"; break; + case '!': result+="\"!"; break; + case '{': result+="\\lcurly{}"; break; + case '}': result+="\\rcurly{}"; break; + case '~': result+="````~"; break; // to get it a bit better in index together with other special characters + default: result+=c; + } } } return result; @@ -73,19 +76,22 @@ QCString LatexDocVisitor::escapeMakeIndexChars(const char *s) const char *p=s; char str[2]; str[1]=0; char c; - while ((c=*p++)) + if (p) { - switch (c) + while ((c=*p++)) { - case '!': m_t << "\"!"; break; - case '"': m_t << "\"\""; break; - case '@': m_t << "\"@"; break; - case '|': m_t << "\\texttt{\"|}"; break; - case '[': m_t << "["; break; - case ']': m_t << "]"; break; - case '{': m_t << "\\lcurly{}"; break; - case '}': m_t << "\\rcurly{}"; break; - default: str[0]=c; filter(str); break; + switch (c) + { + case '!': m_t << "\"!"; break; + case '"': m_t << "\"\""; break; + case '@': m_t << "\"@"; break; + case '|': m_t << "\\texttt{\"|}"; break; + case '[': m_t << "["; break; + case ']': m_t << "]"; break; + case '{': m_t << "\\lcurly{}"; break; + case '}': m_t << "\\rcurly{}"; break; + default: str[0]=c; filter(str); break; + } } } return result; -- cgit v0.12