From 651d9fff9ffdb3cc1060ce0dffcc36b228132524 Mon Sep 17 00:00:00 2001 From: Rin Date: Mon, 29 Dec 2025 12:28:09 +0700 Subject: [PATCH] security: replace unsafe eval with ast.literal_eval in vision operators (#12236) Addresses a potential RCE vulnerability in NormalizeImage by using ast.literal_eval for safer string parsing. --------- Co-authored-by: Kevin Hu --- deepdoc/vision/operators.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/deepdoc/vision/operators.py b/deepdoc/vision/operators.py index 4bee446b1..65d2efa4c 100644 --- a/deepdoc/vision/operators.py +++ b/deepdoc/vision/operators.py @@ -16,6 +16,7 @@ import logging import sys +import ast import six import cv2 import numpy as np @@ -108,7 +109,14 @@ class NormalizeImage: def __init__(self, scale=None, mean=None, std=None, order='chw', **kwargs): if isinstance(scale, str): - scale = eval(scale) + try: + scale = float(scale) + except ValueError: + if '/' in scale: + parts = scale.split('/') + scale = ast.literal_eval(parts[0]) / ast.literal_eval(parts[1]) + else: + scale = ast.literal_eval(scale) self.scale = np.float32(scale if scale is not None else 1.0 / 255.0) mean = mean if mean is not None else [0.485, 0.456, 0.406] std = std if std is not None else [0.229, 0.224, 0.225]