mirror of
https://github.com/octocat/Hello-World.git
synced 2026-07-03 00:07:49 +00:00
Add safe expression evaluator (calc/engine/evaluator.py + builtins.py)
- evaluator.evaluate(expr, extra_names) returns (result_str, is_error) - blocks __builtins__ to prevent arbitrary code execution - handles ZeroDivisionError, ValueError, NameError with friendly messages - builtins.SAFE_NAMES covers trig, hyperbolic, log, exp, rounding, constants
This commit is contained in:
parent
7fd1a60b01
commit
bde60ad530
4 changed files with 48 additions and 0 deletions
26
calc/engine/builtins.py
Normal file
26
calc/engine/builtins.py
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
import math
|
||||
|
||||
SAFE_NAMES = {
|
||||
# trig (radians)
|
||||
"sin": math.sin, "cos": math.cos, "tan": math.tan,
|
||||
"asin": math.asin, "acos": math.acos, "atan": math.atan,
|
||||
"atan2": math.atan2,
|
||||
# trig (degrees)
|
||||
"sind": lambda x: math.sin(math.radians(x)),
|
||||
"cosd": lambda x: math.cos(math.radians(x)),
|
||||
"tand": lambda x: math.tan(math.radians(x)),
|
||||
# hyperbolic
|
||||
"sinh": math.sinh, "cosh": math.cosh, "tanh": math.tanh,
|
||||
# logs & exp
|
||||
"log": math.log, "log2": math.log2, "log10": math.log10,
|
||||
"ln": math.log, "exp": math.exp,
|
||||
# powers & roots
|
||||
"sqrt": math.sqrt, "pow": math.pow,
|
||||
# rounding
|
||||
"abs": abs, "round": round, "floor": math.floor, "ceil": math.ceil,
|
||||
# misc
|
||||
"factorial": math.factorial, "gcd": math.gcd,
|
||||
"degrees": math.degrees, "radians": math.radians,
|
||||
# constants
|
||||
"pi": math.pi, "e": math.e, "tau": math.tau, "inf": math.inf,
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue