Skip to content

Commit 4e613f8

Browse files
authored
Merge pull request from GHSA-g7vv-2v7x-gj9p
cli: eval safety
2 parents cc372d0 + b53348c commit 4e613f8

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

tqdm/cli.py

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,34 @@ def cast(val, typ):
2121
return cast(val, t)
2222
except TqdmTypeError:
2323
pass
24-
raise TqdmTypeError(val + ' : ' + typ)
24+
raise TqdmTypeError(f"{val} : {typ}")
2525

2626
# sys.stderr.write('\ndebug | `val:type`: `' + val + ':' + typ + '`.\n')
2727
if typ == 'bool':
2828
if (val == 'True') or (val == ''):
2929
return True
30-
elif val == 'False':
30+
if val == 'False':
3131
return False
32-
else:
33-
raise TqdmTypeError(val + ' : ' + typ)
34-
try:
35-
return eval(typ + '("' + val + '")')
36-
except Exception:
37-
if typ == 'chr':
38-
return chr(ord(eval('"' + val + '"'))).encode()
39-
else:
40-
raise TqdmTypeError(val + ' : ' + typ)
32+
raise TqdmTypeError(val + ' : ' + typ)
33+
if typ == 'chr':
34+
if len(val) == 1:
35+
return val.encode()
36+
if re.match(r"^\\\w+$", val):
37+
return eval(f'"{val}"').encode()
38+
raise TqdmTypeError(f"{val} : {typ}")
39+
if typ == 'str':
40+
return val
41+
if typ == 'int':
42+
try:
43+
return int(val)
44+
except ValueError as exc:
45+
raise TqdmTypeError(f"{val} : {typ}") from exc
46+
if typ == 'float':
47+
try:
48+
return float(val)
49+
except ValueError as exc:
50+
raise TqdmTypeError(f"{val} : {typ}") from exc
51+
raise TqdmTypeError(f"{val} : {typ}")
4152

4253

4354
def posix_pipe(fin, fout, delim=b'\\n', buf_size=256,

0 commit comments

Comments
 (0)