Stop bash arrays ending at the first ) inside a comment
Both the reader and the writer ran to the first closing paren, which is only the array's own close if nothing inside contains one. HOST1_WATCHDOG_SCAN_IGNORE has carried "(exit 127 — bad image)" for weeks: writes spliced into the middle of it and were refused by bash -n with a bare false, and reads returned the entries above it — the Rsync tab showed no intermediate scripts at all and 10 of 17 daily. Arrays now close on a ) that starts its own line, as confform already did.
This commit is contained in:
@@ -813,16 +813,18 @@ function vv_conf_write_file(string $file, array $fileChanges): bool {
|
||||
$raw
|
||||
) ?? $raw;
|
||||
|
||||
// VV_CONF_ARRAY_CLOSE, not [^)]*\) — see the constant for what the greedy-to-first-paren
|
||||
// version did to a list whose comments contain one.
|
||||
} elseif ($type === 'array') {
|
||||
$raw = preg_replace_callback(
|
||||
'/^(\s*)(' . $qKey . '\s*=\s*\()[^)]*\)/ms',
|
||||
'/^(\s*)(' . $qKey . '\s*=\s*\()' . VV_CONF_ARRAY_CLOSE . '/ms',
|
||||
fn($m) => $m[1] . $m[2] . "\n" . $value . "\n" . $m[1] . ")",
|
||||
$raw
|
||||
) ?? $raw;
|
||||
|
||||
} elseif ($type === 'assoc_array') {
|
||||
$raw = preg_replace_callback(
|
||||
'/^(\s*)(declare\s+-A\s+' . $qKey . '\s*=\s*\()[^)]*\)/ms',
|
||||
'/^(\s*)(declare\s+-A\s+' . $qKey . '\s*=\s*\()' . VV_CONF_ARRAY_CLOSE . '/ms',
|
||||
fn($m) => $m[1] . $m[2] . "\n" . $value . "\n" . $m[1] . ")",
|
||||
$raw
|
||||
) ?? $raw;
|
||||
|
||||
Reference in New Issue
Block a user