Я использую HP Fortify для сканирования своего кода на наличие возможных ошибок, и этот бит кода продолжает помечаться как целочисленное переполнение. Тем не менее, нет никакой арифметики, которая бы оправдывала переполнение, и argc ограничен несколькими условными утверждениями. Несмотря на это, кажется, что Fortify не нравится, когда argc используется для выделения размера буфера. Я не думаю, что в этом случае возможно целочисленное переполнение, и, возможно, эта проблема является результатом ошибки в HP Fortify. Любые предложения относительно того, почему Fortify помечает строку 9 как целочисленное переполнение?
1 int main(int argc, char* argv[]) {
2 if ((argc < 0) || (argc > 10)) {
3 cout<< "number of arguments is invalid.";
4 return -1;
5 }
6 cout << "Number of arguments: " << argc << endl;
7
8 if ((argc > 0) && (argc < 10)) {
9 int myArray[argc]; //This line gets flagged as an integer overflow
10 } else {
11 cout<<"Argc is out of bounds."<<endl;
12 return -1;
13 }
14 return 0;
15 }
Мне также было рекомендовано в комментариях использовать динамический массив. К сожалению, это тоже не работает, так как Fortify все еще отмечает инициализацию массива как целочисленное переполнение.
Задача ещё не решена.
Других решений пока нет …