首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AST解析安全性:内存和时间

AST解析安全性:内存和时间
EN

Stack Overflow用户
提问于 2022-10-03 21:03:09
回答 1查看 75关注 0票数 0

我担心解析恶意代码的AST会产生一个非常大的对象,或者持续很长时间。我的忧虑听起来了吗?当代码本身很小时,是否有一种方法使树变得不合理地大?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-04 02:11:14

AST的大小与被解析程序的长度成正比。所以这不是什么担心。

Python使用PEG解析器,这是一种回溯算法,在代码长度上应该是线性的。如果您遇到一个需要特别长时间来解析短文本的输入,您应该将其报告为bug (情况就是如此)。

但是,请记住,语法树是不平衡的。构建一个AST在代码大小上具有深度线性的程序并不困难。由于执行堆栈的大小非常有限,所以AST的递归遍历可能会使堆栈溢出,即使它们只使用很小的内存百分比。在Python手册中的the documentation for ast.parse中有一个关于这一点的警告:

警告可以使用足够大/复杂的字符串使解释器崩溃,这是因为Python的AST编译器.

中的堆栈深度限制

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73940806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档