fix: sanitize history items stored as tuple/list format

History items store prompt data as (output, inputs, extra_data, ...)
tuple/list format, not as a dict. The sanitizer now handles both
formats to properly strip SENSITIVE_EXTRA_DATA_KEYS.

Fixes coderabbit Critical review on #13095
This commit is contained in:
zhaog100 2026-03-22 12:58:01 +08:00
parent 87b7f4fcd6
commit 2985bc933b

View File

@ -1257,14 +1257,23 @@ class PromptQueue:
"""Remove sensitive keys from prompt inputs in history items. """Remove sensitive keys from prompt inputs in history items.
Prevents tokens from being exposed if history is ever persisted to disk.""" Prevents tokens from being exposed if history is ever persisted to disk."""
item = copy.deepcopy(item) item = copy.deepcopy(item)
prompt = item.get("prompt", {}) prompt_item = item.get("prompt")
if isinstance(prompt, dict): if isinstance(prompt_item, dict):
for node_id, node_data in prompt.items(): for node_id, node_data in prompt_item.items():
if isinstance(node_data, dict): if isinstance(node_data, dict):
inputs = node_data.get("inputs", {}) inputs = node_data.get("inputs", {})
if isinstance(inputs, dict): if isinstance(inputs, dict):
inputs.pop("auth_token_comfy_org", None) for key in SENSITIVE_EXTRA_DATA_KEYS:
inputs.pop("api_key_comfy_org", None) inputs.pop(key, None)
elif isinstance(prompt_item, (list, tuple)) and len(prompt_item) > 2:
prompt_graph = prompt_item[2] if isinstance(prompt_item[2], dict) else None
if isinstance(prompt_graph, dict):
for node_data in prompt_graph.values():
if isinstance(node_data, dict):
inputs = node_data.get("inputs")
if isinstance(inputs, dict):
for key in SENSITIVE_EXTRA_DATA_KEYS:
inputs.pop(key, None)
return item return item
def get_history(self, prompt_id=None, max_items=None, offset=-1, map_function=None): def get_history(self, prompt_id=None, max_items=None, offset=-1, map_function=None):