@@ -574,7 +574,7 @@ ValueFlow::Value CheckBufferOverrunImpl::getBufferSize(const Token *bufTok) cons
574574 return *value;
575575 }
576576
577- if (!var || var->isPointer ())
577+ if (!var || var->isPointer () || ( astIsContainer (bufTok) && var-> getTypeName () != " std::array " ) )
578578 return ValueFlow::Value (-1 );
579579
580580 const MathLib::bigint dim = std::accumulate (var->dimensions ().cbegin (), var->dimensions ().cend (), MathLib::bigint (1 ), [](MathLib::bigint i1, const Dimension &dim) {
@@ -654,7 +654,7 @@ void CheckBufferOverrunImpl::bufferOverflow()
654654 if (!mSettings .library .hasminsize (tok))
655655 continue ;
656656 const std::vector<const Token *> args = getArguments (tok);
657- for (int argnr = 0 ; argnr < args.size (); ++argnr) {
657+ for (size_t argnr = 0 ; argnr < args.size (); ++argnr) {
658658 if (!args[argnr]->valueType () || args[argnr]->valueType ()->pointer == 0 )
659659 continue ;
660660 const std::vector<Library::ArgumentChecks::MinSize> *minsizes = mSettings .library .argminsizes (tok, argnr + 1 );
@@ -846,7 +846,7 @@ void CheckBufferOverrunImpl::argumentSize()
846846 // If argument is '%type% a[num]' then check bounds against num
847847 const Function *callfunc = tok->function ();
848848 const std::vector<const Token *> callargs = getArguments (tok);
849- for (nonneg int paramIndex = 0 ; paramIndex < callargs.size () && paramIndex < callfunc->argCount (); ++paramIndex) {
849+ for (size_t paramIndex = 0 ; paramIndex < callargs.size () && paramIndex < callfunc->argCount (); ++paramIndex) {
850850 const Variable* const argument = callfunc->getArgumentVar (paramIndex);
851851 if (!argument || !argument->nameToken () || !argument->isArray ())
852852 continue ;
0 commit comments