1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-14 16:26:55 +08:00

fix(security): address reported unsafe pickle.load usages (#2099)

This commit is contained in:
Linlang
2026-01-28 22:19:43 +08:00
committed by GitHub
parent 16acb76aba
commit 39634b2158
7 changed files with 18 additions and 14 deletions

View File

@@ -14,6 +14,7 @@ from qlib.model.meta.task import MetaTask
from qlib.model.trainer import TrainerR
from qlib.typehint import Literal
from qlib.utils import init_instance_by_config
from qlib.utils.pickle_utils import restricted_pickle_load
from qlib.workflow import R
from qlib.workflow.task.utils import replace_task_handler_with_cache
@@ -298,7 +299,7 @@ class DDGDA(Rolling):
# but their task test segment are not aligned! It worked in my previous experiment.
# So the misalignment will not affect the effectiveness of the method.
with self._internal_data_path.open("rb") as f:
internal_data = pickle.load(f)
internal_data = restricted_pickle_load(f)
md = MetaDatasetDS(exp_name=internal_data, **kwargs)
@@ -360,7 +361,7 @@ class DDGDA(Rolling):
)
with self._internal_data_path.open("rb") as f:
internal_data = pickle.load(f)
internal_data = restricted_pickle_load(f)
mds = MetaDatasetDS(exp_name=internal_data, **kwargs)
# 3) meta model make inference and get new qlib task

View File

@@ -8,7 +8,6 @@ import os
import yaml
import json
import copy
import pickle
import logging
import importlib
import subprocess
@@ -18,6 +17,7 @@ import numpy as np
from abc import abstractmethod
from ...log import get_module_logger, TimeInspector
from ...utils.pickle_utils import restricted_pickle_load
from hyperopt import fmin, tpe
from hyperopt import STATUS_OK, STATUS_FAIL
@@ -136,7 +136,7 @@ class QLibTuner(Tuner):
exp_result_dir = os.path.join(self.ex_dir, QLibTuner.EXP_RESULT_DIR.format(estimator_ex_id))
exp_result_path = os.path.join(exp_result_dir, QLibTuner.EXP_RESULT_NAME)
with open(exp_result_path, "rb") as fp:
analysis_df = pickle.load(fp)
analysis_df = restricted_pickle_load(fp)
# 4. Get the backtest factor which user want to optimize, if user want to maximize the factor, then reverse the result
res = analysis_df.loc[self.optim_config.report_type].loc[self.optim_config.report_factor]