diff --git a/src/plugins/texteditor/generichighlighter/highlighter.cpp b/src/plugins/texteditor/generichighlighter/highlighter.cpp
index e751020041639f92e62b75511580dbcf6a52812f..587b49665b29d99372650f59a94e7a7a04a9d353 100644
--- a/src/plugins/texteditor/generichighlighter/highlighter.cpp
+++ b/src/plugins/texteditor/generichighlighter/highlighter.cpp
@@ -323,8 +323,11 @@ void Highlighter::changeContext(const QString &contextName,
 {
     if (contextName.startsWith(kPop)) {
         QStringList list = contextName.split(kHash, QString::SkipEmptyParts);
-        for (int i = 0; i < list.size(); ++i)
+        for (int i = 0; i < list.size(); ++i) {
+            if (m_contexts.isEmpty())
+                throw HighlighterException();
             m_contexts.pop_back();
+        }
 
         if (extractObservableState(currentBlockState()) >= PersistentsStart) {
             // One or more contexts were popped during during a persistent state.