CurlHeaderListOverwritten
warning native off by defaultGroup: Probable bugs
Setting cURL's HTTP header list again replaces the earlier list. Combine required headers before applying the final configuration. This inspection is disabled by default because the intended policy or use can vary.
Example
php
<?php
$h=curl_init();curl_setopt($h,CURLOPT_HTTPHEADER,["Authorization: Bearer x"]);curl_setopt($h,CURLOPT_HTTPHEADER,["Accept: application/json"]);curl_exec($h);Reported:
- line 2: Combine HTTP headers before setting the final list.
Detection
- Same curl handle receives two CURLOPT_HTTPHEADER literal lists before execution, first containing Authorization and second lacking it. Neither list is empty/reset-intent and no intervening execution. Highlight second list.
- Resolve builtin functions, classes, constants and methods; user-defined lookalikes are excluded. Follow only bounded local proof in one lexical scope.
- Emit one finding per violating operation, not per supporting evidence statement. When the proof is inconclusive, nothing is reported.
Exceptions (no report)
- Do not report unresolved or shadowed builtin names, unknown values, or incomplete receiver/type provenance. Unknown calls, aliases escaping, and intervening writes invalidate local proof. Similar code outside the stated detection contract is not a finding.
- An opaque handle copied into another binding, an array, a property or a closure no longer has exclusive local ownership. Do not use local option history to prove its current configuration after that escape.
- Both standard suppression forms suppress this native ID.
Fix
None. Choosing a repair requires intent or additional runtime information.
PHP versions
Available throughout supported PHP 5.3–8.5 where the referenced builtin/extension is available. Respect syntax/version-specific receiver contracts; unavailable APIs are not this rule’s concern.
Configure
In custos.json:
json
{
"rules": {
"CurlHeaderListOverwritten": {
"enabled": true
}
}
}Suppress
Before the statement or declaration (or the first statement of the file):
php
// @custos-ignore CurlHeaderListOverwritten