Fix regex operator precedence bug in freenas_api_call method guard

'! $method =~ /pattern/' is parsed as '(! $method) =~ /pattern/' due to
precedence, so the regex ran against "" and always returned false. The
guard never fired and any method string passed through to the API call.

Changed to '$method !~ /^(?:GET|DELETE|POST)$/' which correctly tests the
method string. Also replaced atomic group (?>...) with non-capturing (?:...)
since there is no backtracking concern here.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Kevin Adams
2026-05-15 22:57:08 -04:00
co-authored by Claude Sonnet 4.6
parent 43a8efd125
commit 4c38b5732e
+1 -1
View File
@@ -464,7 +464,7 @@ sub freenas_api_call {
syslog("info", (caller(0))[3] . " : called for host '" . $apihost . "'");
$method = uc($method);
if (! $method =~ /^(?>GET|DELETE|POST)$/) {
if ($method !~ /^(?:GET|DELETE|POST)$/) {
syslog("info", (caller(0))[3] . " : Invalid HTTP RESTful service method '$method'");
die "Invalid HTTP RESTful service method '$method' used.";
}