forked from qt-creator/qt-creator
C++: Fix potential crash
If no template is found, findSpecialization will crash Task-number: QTCREATORBUG-14748 Change-Id: I94b970e6eb994f0a8d85a4b996e52fcff0affef3 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
committed by
Orgad Shaneh
parent
99dea548e0
commit
1b90b80f85
@@ -41,6 +41,7 @@
|
||||
#include <cplusplus/Names.h>
|
||||
#include <cplusplus/Scope.h>
|
||||
#include <cplusplus/Control.h>
|
||||
#include <cplusplus/cppassert.h>
|
||||
|
||||
#include <QStack>
|
||||
#include <QHash>
|
||||
@@ -1255,12 +1256,14 @@ LookupScopePrivate *LookupScopePrivate::nestedType(const Name *name, LookupScope
|
||||
if (baseTemplate)
|
||||
break;
|
||||
}
|
||||
if (LookupScopePrivate *specialization =
|
||||
findSpecialization(baseTemplate, templId, specializations, origin)) {
|
||||
reference = specialization;
|
||||
if (Q_UNLIKELY(debug)) {
|
||||
Overview oo;
|
||||
qDebug() << "picked specialization" << oo(specialization->_name);
|
||||
if (baseTemplate) {
|
||||
if (LookupScopePrivate *specialization =
|
||||
findSpecialization(baseTemplate, templId, specializations, origin)) {
|
||||
reference = specialization;
|
||||
if (Q_UNLIKELY(debug)) {
|
||||
Overview oo;
|
||||
qDebug() << "picked specialization" << oo(specialization->_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1970,6 +1973,7 @@ FullySpecifiedType CreateBindings::resolveTemplateArgument(Clone &cloner,
|
||||
unsigned index)
|
||||
{
|
||||
FullySpecifiedType ty;
|
||||
CPP_ASSERT(specialization && instantiation, return ty);
|
||||
|
||||
const TypenameArgument *tParam = 0;
|
||||
if (Symbol *tArgument = specialization->templateParameterAt(index))
|
||||
|
||||
Reference in New Issue
Block a user