hightman/scws

_xtree_node_search() 函数中compare string的实现有bug?

Closed this issue · 3 comments

static node_t _xtree_node_search(node_t head, node_t **pnode, const char *key, int len)
{
	int cmp;	
	
	cmp = memcmp(key, head->key, len);
	if (cmp == 0)
		cmp = len - strlen(head->key);
	
	if (cmp != 0)	
	{
		// ...
	}
	return head;
}

这里当 head->key 比 key 短时可能发生段错误?

应该改成

static node_t _xtree_node_search(node_t head, node_t **pnode, const char *key, int len)
{
	int cmp;	
	
	int hlen = strlen(head->key);
	int clen = len < hlen ? len : hlen;

	cmp = memcmp(key, head->key, clen);
	if (cmp == 0)
		cmp = len - hlen;

	if (cmp != 0)	
	{
		// ...
	}
	return head;
}

问题不在于返回值,这里读head->key长度外的内存地址的行为可能访问到未分配给进程的内存地址

可能会触发 segment fault