From a1f64bda77d74026d663eca91b975a6ff869d9a3 Mon Sep 17 00:00:00 2001 From: Claude Sonnet 5 Date: Mon, 17 Aug 2026 19:32:03 +0000 Subject: Guard arithmetic on file/shell-output-derived values against non-numeric strings PHP 8 throws a fatal TypeError for arithmetic (+ - * /) on a non-numeric string ("Unsupported operand types"); PHP 7.4 only warned and treated it as 0. Several files perform arithmetic directly on values parsed from intermediate state files (nnode.txt, nrows.txt, structure_input*.txt) or from `dot -Tplain` output, with no is_numeric() check — safe as long as those files are well-formed, but a crash risk if a file is missing/empty/truncated or a `dot` output line doesn't parse as expected. Affected: runtime_check.php ($node, $nrows), remove_variables.php and create_tiers_gom_part1.php ($maxplist=$node-1), mat_structure.php (matrix cell multiplication), and the four network_layout_{evd,inv}[,_2].php files ($r_index=$node+N and the dot-output-derived $cell arithmetic in the _2 variants). Fix pattern: coalesce to 0 via `is_numeric($x) ? $x : 0` before the arithmetic, matching PHP 7.4's original fallback-to-0 behavior instead of crashing. Verified empirically against PHP 8.3.28 with runtime_check.php and mat_structure.php: previously, a missing/empty source file caused TypeError: Unsupported operand types: string - int (or string * int) after the fix, the same missing-file scenario produces only the pre-existing "undefined array key" warnings (same as PHP 7.4) and the function completes and returns a value instead of crashing. Reviewed by: Frederick M Muriithi --- sourcecodes/mat_structure.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'sourcecodes/mat_structure.php') diff --git a/sourcecodes/mat_structure.php b/sourcecodes/mat_structure.php index f4e80290..21d7e709 100644 --- a/sourcecodes/mat_structure.php +++ b/sourcecodes/mat_structure.php @@ -65,7 +65,8 @@ for($l=0;$l<=$i;$l++) for($k=0;$k<$i;$k++) { - $cell=$data_cell[$k]*$cell_val[$k]; + $cell_raw=$data_cell[$k] ?? 0; + $cell=(is_numeric($cell_raw) ? $cell_raw : 0)*$cell_val[$k]; fprintf($fp,"%s\t",$cell); } } -- cgit 1.4.1