Skip to content
Permalink
Browse files
SectionProfiler: Do not attempt to use null values as arrays
When SectionProfiler::getFunctionStats() is called, the 'start'
and 'end' member variables may be null if no code called the
scopedProfileIn()/scopedProfileOut() methods on this profiler instance.
This can occur, for instance, when generating the parser limit report
for wikitext that did not include expensive parser functions.

In PHP 7.4, attemping to use a null value as an array generates
a PHP Notice.[1] This patch adds a check to SectionProfiler::getFunctionStats
to verify that the 'start' value is an array before attempting to
access its keys.

---
[1] https://github.com/php/php-src/blob/php-7.4.0RC1/UPGRADING#L25

Bug: T233012
Change-Id: I2d35bfddfcc4c194aa71265e40387f2f2914e3a5
  • Loading branch information
mszabo-wikia committed Sep 16, 2019
1 parent 6ebfe85 commit 2782276
Showing 1 changed file with 9 additions and 3 deletions.
@@ -96,9 +96,15 @@ public function scopedProfileOut( ScopedCallback &$section ) {
public function getFunctionStats() {
$this->collateData();

$totalCpu = max( $this->end['cpu'] - $this->start['cpu'], 0 );
$totalReal = max( $this->end['real'] - $this->start['real'], 0 );
$totalMem = max( $this->end['memory'] - $this->start['memory'], 0 );
if ( is_array( $this->start ) ) {
$totalCpu = max( $this->end['cpu'] - $this->start['cpu'], 0 );
$totalReal = max( $this->end['real'] - $this->start['real'], 0 );
$totalMem = max( $this->end['memory'] - $this->start['memory'], 0 );
} else {
$totalCpu = 0;
$totalReal = 0;
$totalMem = 0;
}

$profile = [];
foreach ( $this->collated as $fname => $data ) {

0 comments on commit 2782276

Please sign in to comment.