Batuhan Taskaya <batuhanosmantask...@gmail.com> added the comment:

> 1) We should document possible exceptions that need to be caught.  So far, 
> I've found TypeError, MemoryError, SyntaxError, ValueError.

Maybe we should wrap all of these into something like LiteralEvalError to 
easily catch all of them, LiteralEvalError can be subclass of that four but I 
guess in some cases this change might break code.

> 2) Define a size limit guaranteed not to give a MemoryError.  The smallest 
> unsafe size I've found so far is 301 characters:

>>> s = "(" * 101 + ")" * 101
>>> len(s)
202
>>> ast.literal_eval(s)
s_push: parser stack overflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.9/ast.py", line 61, in literal_eval
    node_or_string = parse(node_or_string, mode='eval')
  File "/usr/local/lib/python3.9/ast.py", line 49, in parse
    return compile(source, filename, mode, flags,
MemoryError

> 3) Consider writing a standalone expression compiler that doesn't have the 
> same small limits as our usual compile() function.  This would make 
> literal_eval() usable for evaluating tainted inputs with bigger datasets. 
> (Imagine if the json module could only be safely used with inputs under 301 
> characters).

Can you explain it a bit more detailed, how does this standalone expression 
compiler should work?

----------
components: +Library (Lib)
nosy: +BTaskaya
type:  -> enhancement
versions: +Python 3.9

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue39159>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to