Skip to content

Commit 2938278

Browse files
committed
Refactorization: Store minsizes in vector instead of list which has less overhead
1 parent 63d3939 commit 2938278

4 files changed

Lines changed: 9 additions & 9 deletions

File tree

lib/checkbufferoverrun.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ static bool bailoutIfSwitch(const Token *tok, const unsigned int varid)
313313
}
314314
//---------------------------------------------------------------------------
315315

316-
static bool checkMinSizes(const std::list<Library::ArgumentChecks::MinSize> &minsizes, const Token * const ftok, const MathLib::bigint arraySize, const Token **charSizeToken, const Settings * const settings)
316+
static bool checkMinSizes(const std::vector<Library::ArgumentChecks::MinSize> &minsizes, const Token * const ftok, const MathLib::bigint arraySize, const Token **charSizeToken, const Settings * const settings)
317317
{
318318
if (charSizeToken)
319319
*charSizeToken = nullptr;
@@ -323,7 +323,7 @@ static bool checkMinSizes(const std::list<Library::ArgumentChecks::MinSize> &min
323323

324324
// All conditions must be true
325325
bool error = true;
326-
for (std::list<Library::ArgumentChecks::MinSize>::const_iterator minsize = minsizes.begin(); minsize != minsizes.end(); ++minsize) {
326+
for (std::vector<Library::ArgumentChecks::MinSize>::const_iterator minsize = minsizes.begin(); minsize != minsizes.end(); ++minsize) {
327327
if (!error)
328328
return false;
329329
error = false;
@@ -383,7 +383,7 @@ static bool checkMinSizes(const std::list<Library::ArgumentChecks::MinSize> &min
383383

384384
void CheckBufferOverrun::checkFunctionParameter(const Token &ftok, unsigned int paramIndex, const ArrayInfo &arrayInfo, const std::list<const Token *>& callstack)
385385
{
386-
const std::list<Library::ArgumentChecks::MinSize> * const minsizes = _settings->library.argminsizes(&ftok, paramIndex);
386+
const std::vector<Library::ArgumentChecks::MinSize> * const minsizes = _settings->library.argminsizes(&ftok, paramIndex);
387387

388388
if (minsizes) {
389389
MathLib::bigint arraySize = arrayInfo.element_size();
@@ -1704,7 +1704,7 @@ void CheckBufferOverrun::checkStringArgument()
17041704
const Token *strtoken = argtok->getValueTokenMinStrSize();
17051705
if (!strtoken)
17061706
continue;
1707-
const std::list<Library::ArgumentChecks::MinSize> *minsizes = _settings->library.argminsizes(tok, argnr);
1707+
const std::vector<Library::ArgumentChecks::MinSize> *minsizes = _settings->library.argminsizes(tok, argnr);
17081708
if (!minsizes)
17091709
continue;
17101710
if (checkMinSizes(*minsizes, tok, Token::getStrSize(strtoken), nullptr, _settings))

lib/library.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -623,9 +623,10 @@ Library::Error Library::loadFunction(const tinyxml2::XMLElement * const node, co
623623
if (strlen(argattr) != 1 || argattr[0]<'0' || argattr[0]>'9')
624624
return Error(BAD_ATTRIBUTE_VALUE, argattr);
625625

626+
ac.minsizes.reserve(type == ArgumentChecks::MinSize::MUL ? 2 : 1);
626627
ac.minsizes.push_back(ArgumentChecks::MinSize(type,argattr[0]-'0'));
627628
if (type == ArgumentChecks::MinSize::MUL) {
628-
const char *arg2attr = argnode->Attribute("arg2");
629+
const char *arg2attr = argnode->Attribute("arg2");
629630
if (!arg2attr)
630631
return Error(MISSING_ATTRIBUTE, "arg2");
631632
if (strlen(arg2attr) != 1 || arg2attr[0]<'0' || arg2attr[0]>'9')

lib/library.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include <map>
3030
#include <set>
3131
#include <string>
32-
#include <list>
3332
#include <vector>
3433

3534
namespace tinyxml2 {
@@ -255,7 +254,7 @@ class CPPCHECKLIB Library {
255254
int arg;
256255
int arg2;
257256
};
258-
std::list<MinSize> minsizes;
257+
std::vector<MinSize> minsizes;
259258
};
260259

261260

@@ -310,7 +309,7 @@ class CPPCHECKLIB Library {
310309

311310
bool hasminsize(const std::string &functionName) const;
312311

313-
const std::list<ArgumentChecks::MinSize> *argminsizes(const Token *ftok, int argnr) const {
312+
const std::vector<ArgumentChecks::MinSize> *argminsizes(const Token *ftok, int argnr) const {
314313
const ArgumentChecks *arg = getarg(ftok, argnr);
315314
return arg ? &arg->minsizes : nullptr;
316315
}

test/testlibrary.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ class TestLibrary : public TestFixture {
339339
tokenList.front()->next()->astOperand1(tokenList.front());
340340

341341
// arg1: type=strlen arg2
342-
const std::list<Library::ArgumentChecks::MinSize> *minsizes = library.argminsizes(tokenList.front(),1);
342+
const std::vector<Library::ArgumentChecks::MinSize> *minsizes = library.argminsizes(tokenList.front(),1);
343343
ASSERT_EQUALS(true, minsizes != nullptr);
344344
ASSERT_EQUALS(1U, minsizes ? minsizes->size() : 1U);
345345
if (minsizes && minsizes->size() == 1U) {

0 commit comments

Comments
 (0)