Several security issues in command parser
Opened this issue · 1 comments
Deleted user commented
potential memory leak and buffer overflow.
-
CommandNode::parse 内存泄漏
-> 触发条件: 解析最后一个arg时,arg无效。
-> 触发位置: CommandNode.cpp:L47-L65
-> 触发原理: 无论arg是否解析成功,都申请了一个ArgHolder,但是L66处判断了arg解析是否成功,并且 只释放 成功解析的arg。若arg解析失败,则内存泄漏。 -
CommandNode::parse 缓冲区溢出
-> 触发条件: tokens.size()==1 && 解析失败
-> 触发位置: CommandNode.cpp:L73-L74
-> 触发原理: 当解析失败后,在L44向用户提示错误后,仍然向下执行,直到L72的遍历查找,当执行node.second->getName() == tokens[idx]时,由于idx>=tokens.size() (idx==1),出现缓冲区溢出。考虑到vector的预分配特性,tokens[1]可能仍然在一个可以正常访问的已分配堆区域。但是由于执行了字符串的比较操作,而tokens[1]内部的内容不确定,从而导致缓冲区溢出并崩溃。
hhhxiao commented
已经修复2 fd014eb6308afc14e460c7c58ded0ac355fcd711
感谢大佬