- Confirmed assert_ssrf_blocked_error function exists at crates/pdftract-cli/tests/TH-05-ssrf-block.rs:472-518 - Verified function validates error structure, code range (-32099..=-32000 or -32001), and SSRF_BLOCKED presence - Function used by 7 test cases covering all SSRF payload categories - Compilation successful with cargo build --tests - Acceptance criteria: PASS Closes bf-6d973-child-1
3.7 KiB
3.7 KiB
SSRF_BLOCKED Assertion Helper Verification
Task: Verify SSRF_BLOCKED assertion helper implementation
Date: 2026-07-06
Status: ✅ PASS
Findings
1. Helper Function Exists
The assert_ssrf_blocked_error function is implemented in:
- File:
/home/coding/pdftract/crates/pdftract-cli/tests/TH-05-ssrf-block.rs - Lines: 472-518
2. Function Validates Error Structure
The function correctly checks:
Error Response Structure (lines 477-482)
let error = parsed
.get("error")
.expect(&format!(
"Response should be an error for {}, got: {}",
test_description, response_json
));
✅ Verifies response has an "error" field (not a result)
SSRF_BLOCKED in data.code OR message (lines 485-497)
// Check if error data contains "code": "SSRF_BLOCKED"
let has_ssrf_blocked_code = error
.get("data")
.and_then(|data| data.get("code"))
.and_then(|code| code.as_str())
.map(|code| code == "SSRF_BLOCKED")
.unwrap_or(false);
// Check if error message contains SSRF_BLOCKED
let error_message = error
.get("message")
.and_then(|m| m.as_str())
.unwrap_or("");
let has_ssrf_in_message = error_message.contains("SSRF_BLOCKED");
✅ Checks both data.code == "SSRF_BLOCKED" and message contains "SSRF_BLOCKED"
Error Code Validation (lines 507-517)
let error_code = error
.get("code")
.and_then(|c| c.as_i64())
.expect("Error should have a numeric code");
// Error code should be in the server error range or the specific SSRF blocked code
assert!(
error_code == SSRF_BLOCKED_CODE || (-32099..=-32000).contains(&error_code),
"Error code {} for {} should be SSRF_BLOCKED_CODE or in server error range",
error_code, test_description
);
✅ Validates error code is SSRF_BLOCKED_CODE (-32001) or in server error range (-32099..=-32000)
3. Function is Used by Tests
The helper is used by 7 test cases:
test_ipv4_loopback_blocked(line 229)test_ipv4_wildcard_blocked(line 266)test_cloud_metadata_blocked(line 303)test_rfc1918_private_blocked(line 340)test_ipv6_loopback_blocked(line 377)test_http_scheme_rejected(line 555)test_no_network_connection_attempted(line 616)
4. Additional Helper Function
There's also a companion function assert_ssrf_blocked_or_stub (lines 402-460) that:
- Accepts stub responses (with
_notefield) for Phase 1.8 incomplete implementation - Provides clear WARNING output when stub is detected
- Used by no current tests (strict validation is preferred)
Acceptance Criteria Status
| Criterion | Status | Details |
|---|---|---|
assert_ssrf_blocked_error function exists |
✅ PASS | Lines 472-518 in CLI test file |
| Validates error structure | ✅ PASS | Checks for "error" field, not "result" |
| Validates error code range | ✅ PASS | Checks SSRF_BLOCKED_CODE (-32001) or -32099..=-32000 |
| Validates SSRF_BLOCKED presence | ✅ PASS | Checks data.code OR message for "SSRF_BLOCKED" |
| Test file compiles | ⏳ PENDING | Compilation in progress |
Compilation Status
✅ Compilation PASSED
Ran cargo build --tests --message-format=short - successful compilation of:
pdftract-clicrate containingTH-05-ssrf-block.rsassert_ssrf_blocked_errorfunction compiles without errors- Only warning is unrelated unused function (
extract_error_message)
Conclusion
The SSRF_BLOCKED assertion helper is correctly implemented with:
- ✅ Proper error structure validation
- ✅ Error code range validation (-32099..=-32000 or -32001)
- ✅ SSRF_BLOCKED presence check in data.code OR message
- ✅ Clear error messages for debugging
- ✅ Used by 7 test cases covering all SSRF payload categories
- ✅ Compiles successfully
Overall Result: PASS