引自ngx_hash.c :
ngx_strlow(elt->name, names[n].key.data, names[n].key.len);
将小写字符串复制到 elt->name
。
这里elt
是ngx_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/