Skip to content

CAMEL-24607: camel-langchain4j-agent-api - CodeInjectionGuardrail must count distinct injection types - #26065

Merged
Croway merged 1 commit into
apache:mainfrom
oscerd:fix/CAMEL-24607
Sep 3, 2026
Merged

CAMEL-24607: camel-langchain4j-agent-api - CodeInjectionGuardrail must count distinct injection types#26065
Croway merged 1 commit into
apache:mainfrom
oscerd:fix/CAMEL-24607

Conversation

@oscerd

@oscerd oscerd commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Issue

CAMEL-24607

Problem

In non-strict mode CodeInjectionGuardrail.validate() collects every matched pattern's InjectionType
into a List without de-duplication, then blocks the input when detected.size() >= 2. The inline
comment says the intent is to require "multiple different types", but several patterns share a type
(4 SHELL_COMMAND, 4 SQL_INJECTION, 3 JAVASCRIPT, 2 HTML_XSS, 3 TEMPLATE_INJECTION).

So a single legitimate input matching two patterns of one type is falsely blocked — e.g. a normal
templating question render {{name}} and ${value} matches both {{...}} and ${...} (both
TEMPLATE_INJECTION) and is rejected. The sibling PromptInjectionGuardrail de-duplicates correctly.

Fix

Only add a type when it is not already present, so detected.size() >= 2 genuinely means two distinct
types matched.

Testing

  • New testNonStrictModeDoesNotBlockMultipleMatchesOfTheSameType asserts the templating example passes;
    verified it fails against the unpatched code and passes with the fix. All existing
    CodeInjectionGuardrailTest cases still pass.
  • mvn -Psourcecheck validate green.

🤖 Generated with Claude Code

…t count distinct injection types

In non-strict mode CodeInjectionGuardrail collected every matched pattern's type
into a list without de-duplication and then blocked when the list had two or more
entries, although the intent (per the inline comment and the sibling
PromptInjectionGuardrail) is to require multiple DIFFERENT types. Because several
patterns share a type (e.g. two TEMPLATE_INJECTION patterns for {{...}} and ${...}),
a single legitimate templating question such as "render {{name}} and ${value}" was
falsely blocked. Only record a type when it is not already present, so the
"multiple types" check counts distinct types.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ka4dAcJMpxahMfk3kmG5Ls
Signed-off-by: Andrea Cosentino <ancosen@gmail.com>
@oscerd oscerd added the bug Something isn't working label Sep 3, 2026
@oscerd oscerd added this to the 4.23.0 milestone Sep 3, 2026
@oscerd
oscerd requested review from Croway and davsclaus September 3, 2026 08:08
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

🌟 Thank you for your contribution to the Apache Camel project! 🌟
🤖 CI automation will test this PR automatically.

🐫 Apache Camel Committers, please review the following items:

  • First-time contributors require MANUAL approval for the GitHub Actions to run
  • You can use the command /component-test (camel-)component-name1 (camel-)component-name2.. to request a test from the test bot although they are normally detected and executed by CI.
  • You can label PRs using skip-tests and test-dependents to fine-tune the checks executed by this PR.
  • Build and test logs are available in the summary page. Only Apache Camel committers have access to the summary.

⚠️ Be careful when sharing logs. Review their contents before sharing them publicly.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • components/camel-ai/camel-langchain4j-agent-api

🔬 Scalpel shadow comparison — Scalpel: 10 tested, 27 compile-only — current: 10 all tested

Maveniverse Scalpel detected 37 affected modules (current approach: 10).

⚠️ Modules only in Scalpel (27)
  • apache-camel
  • camel-allcomponents
  • camel-catalog
  • camel-catalog-console
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-endpointdsl
  • camel-endpointdsl-support
  • camel-itest
  • camel-jbang-core
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-test
  • camel-kamelet-main
  • camel-launcher
  • camel-report-maven-plugin
  • camel-route-parser
  • camel-yaml-dsl
  • camel-yaml-dsl-deserializers
  • camel-yaml-dsl-maven-plugin
  • coverage
  • docs
  • dummy-component

Skip-tests mode would test 10 modules (1 direct + 9 downstream), skip tests for 27 (generated code, meta-modules)

Modules Scalpel would test (10)
  • camel-jbang-mcp
  • camel-jbang-plugin-mcp
  • camel-jbang-plugin-route-parser
  • camel-jbang-plugin-tui
  • camel-jbang-plugin-validate
  • camel-langchain4j-agent
  • camel-langchain4j-agent-api
  • camel-launcher-container
  • camel-yaml-dsl-validator
  • camel-yaml-dsl-validator-maven-plugin
Modules with tests skipped (27)
  • apache-camel
  • camel-allcomponents
  • camel-catalog
  • camel-catalog-console
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-endpointdsl
  • camel-endpointdsl-support
  • camel-itest
  • camel-jbang-core
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-test
  • camel-kamelet-main
  • camel-launcher
  • camel-report-maven-plugin
  • camel-route-parser
  • camel-yaml-dsl
  • camel-yaml-dsl-deserializers
  • camel-yaml-dsl-maven-plugin
  • coverage
  • docs
  • dummy-component

ℹ️ Shadow mode — Scalpel observes but does not affect test execution. Learn more

All tested modules (37 modules)
  • Camel :: AI :: LangChain4j :: Agent
  • Camel :: AI :: LangChain4j :: Agent :: API
  • Camel :: All Components Sync point
  • Camel :: Assembly
  • Camel :: Catalog :: Camel Catalog
  • Camel :: Catalog :: Camel Report Maven Plugin
  • Camel :: Catalog :: Camel Route Parser
  • Camel :: Catalog :: Console
  • Camel :: Catalog :: Dummy Component
  • Camel :: Catalog :: Maven
  • Camel :: Catalog :: Suggest
  • Camel :: Component DSL
  • Camel :: Coverage
  • Camel :: Docs
  • Camel :: Endpoint DSL
  • Camel :: Endpoint DSL :: Support
  • Camel :: Integration Tests
  • Camel :: JBang :: Core
  • Camel :: JBang :: Integration tests
  • Camel :: JBang :: MCP
  • Camel :: JBang :: Main
  • Camel :: JBang :: Plugin :: Edit
  • Camel :: JBang :: Plugin :: Generate
  • Camel :: JBang :: Plugin :: Kubernetes
  • Camel :: JBang :: Plugin :: MCP
  • Camel :: JBang :: Plugin :: Route Parser
  • Camel :: JBang :: Plugin :: TUI
  • Camel :: JBang :: Plugin :: Testing
  • Camel :: JBang :: Plugin :: Validate
  • Camel :: Kamelet Main
  • Camel :: Launcher
  • Camel :: Launcher :: Container
  • Camel :: YAML DSL
  • Camel :: YAML DSL :: Deserializers
  • Camel :: YAML DSL :: Maven Plugins
  • Camel :: YAML DSL :: Validator
  • Camel :: YAML DSL :: Validator Maven Plugin

⚙️ View full build and test results

@Croway
Croway merged commit e4f06f3 into apache:main Sep 3, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working components components-ai

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants