{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": "php -r \"\n\/\/ OLD pattern (buggy - spans newlines)\n\\$oldPattern = '\/https?:\\\\\/\\\\\/[^:]+:[^@]+@\/i';\n\n\/\/ NEW pattern (no whitespace allowed)\n\\$newPattern = '\/https?:\\\\\/\\\\\/[^\\\\s:\\\\\/]+:[^\\\\s@]+@\/i';\n\n\\$testCases = [\n 'SHOULD NOT MATCH - simple URL' => \\\"private const string API_BASE_URL = 'https:\/\/api.anthropic.com\/v1';\\\",\n 'SHOULD NOT MATCH - port URL' => \\\"return self::get('OLLAMA_HOST', 'http:\/\/localhost:11434');\\\",\n 'SHOULD MATCH - creds in URL' => \\\"curl 'http:\/\/admin:secret123@example.com\/api'\\\",\n 'SHOULD MATCH - creds in URL 2' => \\\"\\\\$url = 'https:\/\/user:password@database.host.com';\\\",\n];\n\necho \\\"=== Testing NEW pattern ===\\\\n\\\";\nforeach (\\$testCases as \\$desc => \\$line) {\n \\$matches = preg_match(\\$newPattern, \\$line);\n \\$status = \\$matches ? 'MATCH' : 'NO MATCH';\n echo \\\"\\$desc => \\$status\\\\n\\\";\n}\n\"",
"description": "Test fixed regex pattern"
}
}
{
"tool_response": {
"stdout": "=== Testing NEW pattern ===\nSHOULD NOT MATCH - simple URL => NO MATCH\nSHOULD NOT MATCH - port URL => NO MATCH\nSHOULD MATCH - creds in URL => MATCH\nSHOULD MATCH - creds in URL 2 => MATCH",
"stderr": "",
"interrupted": false,
"isImage": false
}
}