php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #75710 single-char vars get lost
Submitted: 2017-12-20 08:18 UTC Modified: 2018-04-26 12:20 UTC
Votes:1
Avg. Score:4.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:0 (0.0%)
Same OS:1 (100.0%)
From: benjamin dot roth at jaumo dot com Assigned:
Status: Open Package: Scripting Engine problem
PHP Version: 7.1.12 OS: Ubuntu
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2017-12-20 08:18 UTC] benjamin dot roth at jaumo dot com
Description:
------------
1. I am not 100% if I got the right category for that.
2. I was NOT able to reproduce that intentionally but we obsorved that many, many times in production.
3. This only happens in long-running PHP environments. It does NOT happen with PHPFPM as every request creates a separate PHP runtime. Our observations have been made when serving PHP requests with amp/aerys.
4. It does not happen in EVERY long-running process, but WHEN it happens, the current process is affected until it dies

Symptom:
Single-char vars are instantly dropped / unset.
E.g.
----
$f = new Foo();
$f->bar();
----

Results in 
----
[E_NOTICE] Undefined variable: f
----

and 

----
Call to a member function bar() on null
----

This does never happen when using variable names with a couple of chars. I didn't find out the exact limit, but as of now I have only seen single-char-vars in logs.



Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2018-04-07 22:14 UTC] cmb@php.net
> Our observations have been made when serving PHP requests with
> amp/aerys.

Would it be possible that the strange behavior is caused by
amphp/aerys in the first place?
 [2018-04-08 19:10 UTC] benjamin dot roth at jaumo dot com
If a $var is 'null' one line after its creation. How could that be caused by _any_ userland code?
 [2018-04-26 12:07 UTC] benjamin dot zikarsky at jaumo dot com
We triggered this bug again today. Now on PHP 7.2.4.

Many long-running processes (to be more specific: Gearman worker running an Amp-loop) started throwing exceptions: "Undefined variable: m" in this source-file: https://github.com/aws/aws-sdk-php/blob/master/src/Api/Serializer/RestSerializer.php#L112

This source-file is obviously completely unrelated to Amp or our custom codebase. Also it can be assumed to be rather battletested as it is part of the AWS SDK for PHP.

We are reasonable sure that the same process ran through the same function multiple times before the error without throwing the exception.
 [2018-04-26 12:20 UTC] nikic@php.net
How often are you seeing this issue? Which extensions are you using? In particular interested in anything using shared memory, such as opcache and apcu.
 [2018-04-27 12:15 UTC] benjamin dot zikarsky at jaumo dot com
The servers run with the following modules.

root@php1:~# php -v
PHP 7.2.4-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Apr  5 2018 08:53:57) ( NTS )                                                                
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.4-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies                

root@php1:~# php -m                                                                                                                                  
[PHP Modules]                                                                                                                                        
calendar                                                                                                                                             
cassandra
Core
ctype
curl
date
dom
event
exif
fileinfo
filter
ftp
gd
gearman
gettext
gmagick
hash
iconv
igbinary
inotify
intl
json
libxml
mbstring
memcached
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_pgsql
pgsql
Phar
posix
rdkafka
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tidy
tokenizer
wddx
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache


Some thoughts about this: OPcache is enabled of course. There are also 5 less common extensions. We build and package (.deb) them ourselves:

php7.2-cassandra                     1.3.2                                              
php7.2-event                         2.3.0                                             
php7.2-inotify                       2.0.0                                              
php7.2-rdkafka                       3.0.5                                              
php7.2-redis                         3.1.6
 [2018-06-20 08:22 UTC] benjamin dot zikarsky at jaumo dot com
Possibly related to https://bugs.php.net/bug.php?id=76281?
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Mon Jun 24 09:01:26 2019 UTC