|
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 <fredmanglis@gmail.com>
|
|
$fprows and $lc were never defined anywhere in exe_time(). On PHP 7.4
fwrite() with a null resource argument just emitted warnings and
returned false. On PHP 8+, fwrite() requires a resource/false is no
longer coerced, so this throws an uncaught TypeError on every call,
crashing any page that invokes exe_time() (progress-tracking pages).
Verified empirically against PHP 8.3.28: before the fix, calling
exe_time() throws
TypeError: fwrite(): Argument #1 ($stream) must be of type resource, null given
after the fix it returns the computed runtime estimate as before.
Reviewed by: Frederick M Muriithi <fredmanglis@gmail.com>
|