Where can the 'sanitized' keyword NOT be used in EK9?
← Security and Sanitization · Ref: Q950
sanitized keyword can't be on captured variables or declarations.
1. NOT ON CAPTURES (E07941)
When a dynamic function or class captures a variable, the capture cannot be marked sanitized. Sanitization is a property of function parameters, not captures.
2. NOT ON DECLARATIONS (E07943)
Local variable declarations cannot use sanitized. Only function/method parameters can be marked sanitized because sanitized tracks external untrusted input entering a function boundary.
VALID USAGE
processInput() as pure -> input as sanitized String <- result as String: String(input)
INVALID USAGE
localVar as sanitized String: "x" // E07943
WHY RESTRICTED
Sanitization is about trust boundaries. Only parameters represent data crossing a trust boundary. Local variables and captures are already inside the trusted zone.
See Q215 for sanitized parameter basics. See Q217 for pure interaction. See Q269 for input validation.
Example
#!ek9 defines module qa.security.sanitizedrestrictions defines function <?- Valid use: sanitized on function parameter. -?> validateInput() as pure -> userInput as sanitized String <- result as String? safeCopy <- String(userInput) result: "Validated: " + safeCopy processQuery() as pure -> sql as sanitized String <- output as String? localCopy <- String(sql) output: "Query: " + localCopy defines program SanitizedRestrictionsDemo() stdout <- Stdout() r1 <- validateInput("user data") if r1? stdout.println(r1) r2 <- processQuery("SELECT 1") if r2? stdout.println(r2) stdout.println("sanitized only on function parameters")
Common mistakes
E07920 — The sanitized modifier is only valid on incoming function/method parameters, not on a return or local declaration. See ek9 -h E07920 for details.
Incorrect:
<- result as sanitized String?
Correct:
<- result as String?
Other ways to ask this
- What triggers E07941 SANITIZED_NOT_ON_CAPTURED?
- What triggers E07943 SANITIZED_NOT_ON_DECLARATION?
- Why can't captured variables be sanitized?
- Where is the sanitized modifier restricted?
Coming from another language?
Java: no language-level sanitization. Python: no taint tracking. Rust: newtype for manual tracking. EK9: sanitized restricted to function parameters only, enforced at compile time.
Keywords: E07941, E07943, boundary, captured, declaration, parameter, restriction, sanitized, security, trust