diff --git a/CheckBufferOverrun.cpp b/CheckBufferOverrun.cpp index e0f375fd1..ee523691c 100644 --- a/CheckBufferOverrun.cpp +++ b/CheckBufferOverrun.cpp @@ -33,13 +33,9 @@ void CheckBufferOverrun() { const char *varname = getstr(tok,1); unsigned int size = strtoul(getstr(tok,3), NULL, 10); - int total_size = 0; - if (strcmp(tok->str,"char") == 0) - total_size = size * sizeof(char); - else if (strcmp(tok->str,"int") == 0) - total_size = size * sizeof(int); - else if (strcmp(tok->str,"double") == 0) - total_size = size * sizeof(double); + int total_size = size * SizeOfType(tok->str); + if (total_size == 0) + continue; int _indentlevel = indentlevel; for (TOKEN *tok2 = gettok(tok,5); tok2; tok2 = tok2->next) { @@ -70,26 +66,23 @@ void CheckBufferOverrun() } } - if (total_size > 0) - { - // memset, memcmp, memcpy, strncpy, fgets.. - if (strcmp(tok2->str,"memset")==0 || - strcmp(tok2->str,"memcpy")==0 || - strcmp(tok2->str,"memcmp")==0 || - strcmp(tok2->str,"strncpy")==0 || - strcmp(tok2->str,"fgets")==0 ) + // memset, memcmp, memcpy, strncpy, fgets.. + if (strcmp(tok2->str,"memset")==0 || + strcmp(tok2->str,"memcpy")==0 || + strcmp(tok2->str,"memcmp")==0 || + strcmp(tok2->str,"strncpy")==0 || + strcmp(tok2->str,"fgets")==0 ) + { + if (match(tok2->next,"( var , num , num )") || + match(tok2->next,"( var , var , num )") ) { - if (match(tok2->next,"( var , num , num )") || - match(tok2->next,"( var , var , num )") ) + if (strcmp(getstr(tok2,2),varname)==0 && + atoi(getstr(tok2,6))>total_size) { - if (strcmp(getstr(tok2,2),varname)==0 && - atoi(getstr(tok2,6))>total_size) - { - std::ostringstream ostr; - ostr << FileLine(tok2) << ": Buffer overrun"; - ReportErr(ostr.str()); - } + std::ostringstream ostr; + ostr << FileLine(tok2) << ": Buffer overrun"; + ReportErr(ostr.str()); } } }