Skip to content

Fix safety finding leaks in LangChain cache wrappers and LlamaIndex streaming depth counters - #18

Merged
manas-fortifyroot merged 1 commit into
fr-v0.52.6.xfrom
fix/safety-deferred-findings-and-stream-depth-leak
Apr 3, 2026
Merged

Fix safety finding leaks in LangChain cache wrappers and LlamaIndex streaming depth counters#18
manas-fortifyroot merged 1 commit into
fr-v0.52.6.xfrom
fix/safety-deferred-findings-and-stream-depth-leak

Conversation

@manas-fortifyroot

Copy link
Copy Markdown

Summary

  • LangChain: Added missing discard_deferred_findings() to base_chat_model_generate_with_cache_wrapper and base_llm_generate_helper_wrapper — stale findings from prior requests could leak into cached response paths
  • LlamaIndex: Restructured all 4 streaming safety wrappers (llm_stream_chat_wrapper, llm_astream_chat_wrapper, llm_stream_complete_wrapper, llm_astream_complete_wrapper) to use try/finally for _exit_safety() — depth counter leaked permanently on exceptions, breaking safety for all subsequent requests on the thread

Found during T6 SDK safety cassette test implementation (PE-level code review).

Test plan

  • ./scripts/run-tests.sh --fr --package '*langchain*' — 23 passed
  • ./scripts/run-tests.sh --fr --package '*llamaindex*' — 54 passed
  • Re-vendor into fortifyroot-sdk-py and run full SDK test suite — 89 passed

…h counter leak in LlamaIndex streaming wrappers

LangChain: base_chat_model_generate_with_cache_wrapper and
base_llm_generate_helper_wrapper were missing discard_deferred_findings(),
allowing stale safety findings from a prior request on the same thread to
leak into cached/helper response paths. Their non-cached counterparts
already had this call.

LlamaIndex: All 4 streaming wrappers (llm_stream_chat_wrapper,
llm_astream_chat_wrapper, llm_stream_complete_wrapper,
llm_astream_complete_wrapper) had _enter_safety() calls without
guaranteed _exit_safety() on all code paths. If wrapped(), await,
or LlamaIndexStreamingSafety() threw, the depth counter stayed
elevated permanently, breaking safety for all subsequent requests
on the thread. Restructured all 4 to use try/finally.
@manas-fortifyroot
manas-fortifyroot merged commit 6667e0b into fr-v0.52.6.x Apr 3, 2026
9 checks passed
@manas-fortifyroot
manas-fortifyroot deleted the fix/safety-deferred-findings-and-stream-depth-leak branch April 3, 2026 09:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant