很多库函数、API 在对缓冲区进行操作的时候,需要通过一个整型参数来指定这个缓冲区的长度限 制。直接将污点数据作为长度限制参数,可能会造成缓冲区溢出。
对于禁止使用被污染的数据作为缓冲区长度的情况,示例1给出了不规范用法(C/C++ 语言)示 例。示例2给出了规范用法(C/C++ 语言)示例。
示例1:
#include<memory.h)
void f(void *dest, const void *sre, size t count){
scanf("%d",&.count);
memepy(dest, sre, count);
在如上示例中,函数memcpy() 指定复制内存长度的参数为污点数据。
示例2:
#include<memory.h)
void f(void *dest, const void xsre, size t count){
memcpy(dest, sre, count);
如上示例中,复制内存的长度参数 count 没有被污染。但在调用该函数前,仍需要对其长度进行验证,以确保该长度值不会超过目的缓冲区的长度。