#183·japronto

在 Parser_feed 函数中使用 memcpy 向无效地址写入数据存在风险

作者: awen-li创建于 2021年5月27日更新于 2021年5月31日

代码片段

Parser_feed(Parser* self, PyObject *args)
{
     ........
     if((size_t)data_len > self->buffer_capacity - (self->buffer_end - self->buffer_start)) {
            self->buffer_capacity = MAX(self->buffer_capacity * 2, self->buffer_end - self->buffer_start + data_len);
            if(self->buffer == self->inline_buffer) {
                   self->buffer = malloc(self->buffer_capacity); --------> 可能返回为 NULL 指针
                   memcpy(self->buffer + self->buffer_start, self->inline_buffer + self->buffer_start,
                                  self->buffer_end - self->buffer_start);
    } 
    ........
}

描述

函数:Parser_feed 文件:cparser.c 调用路径:feed (Python) -> Parser_feed -> memcpy 警告类型:无效写入。我们的分析工具在可能的无效地址上报告了警告。由于 buffer_capacity 可能依赖于外部输入,因此可能会发生 malloc 失败。在此处需要验证返回值。 也见 详细信息

内容来源: squeaky-pl/japronto