主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

字符串格式设定符不正确导致缓冲区溢出

字符串格式指定符导致标准库函数的缓冲区参量溢出

描述

当函数(如 sscanf)的格式指定符参量导致内存缓冲区参量溢出或下溢时,会发生此缺陷。

风险

如果格式指定符指定的精度大于内存缓冲区大小,则会发生溢出。溢出可能导致意外行为,例如内存损坏。

修复

使用与内存缓冲区大小兼容的格式指定符。

示例

全部展开

#include <stdio.h>

void func (char *str[]) {
    char buf[32];
    sscanf(str[1], "%33c", buf);
}

在此示例中,buf 可以包含 32 个 char 元素。因此,格式指定符 %33c 会导致缓冲区溢出。

更正 - 在格式指定符中使用较小的精度

一种可能的纠正方法是将较少的元素读入缓冲区。

#include <stdio.h>

void func (char *str[]) {
    char buf[32];
    sscanf(str[1], "%32c", buf);
}

结果信息

组:静态内存
语言:C | C++
默认值:手写代码时为启动,生成代码时为关闭
命令行语法:STR_FORMAT_BUFFER_OVERFLOW
影响

版本历史记录

在 R2015b 中推出