@@ -181,46 +181,18 @@ void CheckString::checkSuspiciousStringCompare()
181181 else if (!Token::Match (litTok, " %char%|%num%|%str%" ))
182182 continue ;
183183
184- if (mTokenizer -> isCPP () && (! varTok->valueType () || !varTok-> valueType ()-> isIntegral () ))
184+ if (varTok->isLiteral ( ))
185185 continue ;
186186
187- // Pointer addition?
188- if (varTok->str () == " +" && mTokenizer ->isC ()) {
189- const Token * const tokens[2 ] = { varTok->astOperand1 (), varTok->astOperand2 () };
190- for (const Token * t : tokens) {
191- while (t && (t->str () == " ." || t->str () == " ::" ))
192- t = t->astOperand2 ();
193- if (t && t->variable () && t->variable ()->isPointer ())
194- varTok = t;
195- }
196- }
197-
198- const Token* oldVarTok = varTok;
199- while (varTok->str () == " *" ) {
200- if (!mTokenizer ->isC () || varTok->astOperand2 () != nullptr || litTok->tokType () != Token::eString)
201- break ;
202- varTok = varTok->astOperand1 ();
203- }
204-
205- if (mTokenizer ->isC () && varTok->str () == " &" )
206- varTok = varTok->astOperand1 ();
207-
208- if (varTok->str () == " [" )
209- varTok = varTok->astOperand1 ();
210-
211- while (varTok && (varTok->str () == " ." || varTok->str () == " ::" ))
212- varTok = varTok->astOperand2 ();
213- if (!varTok || !varTok->isName ())
187+ const ValueType* varType = varTok->valueType ();
188+ if (mTokenizer ->isCPP () && (!varType || !varType->isIntegral ()))
214189 continue ;
215190
216- const Variable *var = varTok->variable ();
217-
218- const bool ischar (litTok->tokType () == Token::eChar);
219191 if (litTok->tokType () == Token::eString) {
220- if (mTokenizer ->isC () || (var && var-> isArrayOrPointer () ))
221- suspiciousStringCompareError (tok, oldVarTok ->expressionString (), litTok->isLong ());
222- } else if (ischar && var && var-> isPointer () ) {
223- suspiciousStringCompareError_char (tok, oldVarTok ->expressionString ());
192+ if (mTokenizer ->isC () || (varType && varType-> pointer ))
193+ suspiciousStringCompareError (tok, varTok ->expressionString (), litTok->isLong ());
194+ } else if (litTok-> tokType () == Token::eChar && varType && varType-> pointer ) {
195+ suspiciousStringCompareError_char (tok, varTok ->expressionString ());
224196 }
225197 }
226198 }
0 commit comments