json-tutorial icon indicating copy to clipboard operation
json-tutorial copied to clipboard

tutorial01中lept_parse_*()函数的越界问题

Open daliny opened this issue 7 years ago • 3 comments

lept_parse_false(), lept_parse_true(), lept_parse_null()函数中对字符的比较可能会越界,比如c->json="tr", 但是却比较到c->json[2]。是不是应该在if()语句中加入strlen(): if(strlen(c->json)>3 || c->json[0] != 'r' || c->json[1]!='u'||c->json[2] != 'e') 还是说这种越界没关系?

daliny avatar May 02 '18 12:05 daliny

不需要。 因为c->json="tr". c string 结尾为空字符,c->json[2]为'\0', c->json[2] == 'u' 为false.(注意bug:比较用==而不是=)

kingFighter avatar May 03 '18 00:05 kingFighter

好的,谢谢

daliny avatar May 07 '18 02:05 daliny

不完全赞同楼上的解答。因为如果是lept_parse(&v, "fa"),楼上的回答无法解释。 其实这里应该这么解释:因为逻辑或 || 运算符是有运算顺序的,所以在c->json[1] != 'l'(实际上为‘\0’)这里由于为真的缘故,整个if判断为真,而不再进行之后的c->json[2] != 's'判断,所以不会出现越界问题。

GreatDan avatar Feb 11 '22 15:02 GreatDan