Flawfinder错误-内部缓冲区溢出如何限制字符串输入的大小并防止其溢出?

问题描述

我有以下代码:

void parseOptions(int argc,char* argv[]) {
std::string mob;
int option,index;

    struct option long_options[] = {{"version",no_argument,'V'},{"mobile-interface",required_argument,'m'},{0,0}};

    while ((option = getopt_long(argc,argv,"Vm:",long_options,&index)) != -1) {
      switch (option) {
        case 'V':
          printVersion();
          break;
        case 'm':
          if (strlen(optarg) == HASHED_MOB_SIZE) {
            mob = optarg;
          }
          break;
        default:
          std::cerr << "Getopt switch default case shouldn't be reached... aborting program.\n";
          exit(ERR_GETOPT_FAILURE);
      }
    }
}

我运行Flawfinder并收到以下错误消息:

main.cpp:48:[3](缓冲区)getopt_long: 一些较旧的实现无法防止内部缓冲区溢出 (CWE-120,CWE-20)。检查安装的执行情况,或限制大小 所有字符串输入。

如何限制字符串输入大小?

解决方法

所以 Flawfinder 是对的。

getopt 中存在一个漏洞:CVE-1999-0966

Solaris getopt 中的缓冲区溢出问题允许本地用户通过长 argv[0] 获得 root 权限。

我的解决方案是验证 argc 是否大于 1 并且 argv[0] 不会太长。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...