c - 为什么nginx中的这段代码不会导致缓冲区溢出?

标签 c nginx

引自ngx_hash.c :

ngx_strlow(elt->name, names[n].key.data, names[n].key.len);

将小写字符串复制到 elt->name

这里eltngx_hash_elt_t *类型:

typedef struct {
    void             *value;
    u_short           len;
    u_char            name[1];
} ngx_hash_elt_t;

如您所见,name 只有 1 个字符宽,IMO ngx_strlow 会导致缓冲区溢出,但它实际上没有问题,谁能解释一下?

最佳答案

通常定义这种结构以便程序员(如果她想要 len=100)可以:

ngx_hash_elt_t *X;
X = malloc(sizeof(ng_has_elt_t)+99);

在这种情况下,用户和库引用 X.name 仍然有效且有意义,因为它是指向字符串开头的指针。

关于c - 为什么nginx中的这段代码不会导致缓冲区溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6440067/

相关文章:

Laravel、Nginx 和 Docker 容器,权限被拒绝

node.js - 502 错误网关 nginx 谷歌应用程序引擎

linux - 用top判断Linux进程内存

ubuntu - 上传大于10mb的文件时"Connection Interrupted"

C 语言>菜鸟<我做错了什么?

c - 如何在函数中将C指针设置为数组

在C中创建多个进程

c - 如何确定 C 中的 Unix 文本文件?

c - 通过渲染四边形更新粒子系统的速度和位置

django - 在 Nginx 代理 + apache 设置中重写 URL