[php-src] Issue #8126: unexpected results stored depending on variables
| From: | j0101s | Date: | Mon, 21 Feb 2022 02:03:16 +0000 |
| Subject: | [php-src] Issue #8126: unexpected results stored depending on variables | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-239909@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/8126
Author: j0101s
### Description
The following code:
```php
<?php
$GTB = array(
1 => 7,
2 => 3,
3 => 5,
4 => 1,
5 => 6,
6 => 2,
7 => 4,
8 => 0);
$BTG = array(
7 => 1,
3 => 2,
5 => 3,
1 => 4,
6 => 5,
2 => 6,
4 => 7,
0 => 8);
//case 1
$u = 3;
$d = 2;
echo "u: $u, d: $d\n";
$up = $BTG[ ( (($GTB[$u] & 3) << 1) | (($GTB[$d] & 4) >> 2) ) ];
$dn = $BTG[ ( (($GTB[$u] & 1) << 2) | (($GTB[$d] & 6) >> 1) ) ];
echo "case 1 result: $up $dn\n\n";
//case 2
$u = 3;
$d = 2;
echo "u: $u, d: $d\n";
$u = $BTG[ (($GTB[$u] & 3) << 1) | (($GTB[$d] & 4) >> 2) ];
$d = $BTG[ (($GTB[$u] & 1) << 2) | (($GTB[$d] & 6) >> 1) ];
echo "case 2 result: $u $d\n\n";
//case 3
$a = 3;
$b = 2;
echo "a: $a, b: $b\n";
$a = $BTG[ (($GTB[$a] & 3) << 1) | (($GTB[$b] & 4) >> 2) ];
$b = $BTG[ (($GTB[$a] & 1) << 2) | (($GTB[$b] & 6) >> 1) ];
echo "case 3 result: $a $b\n\n";
//case 4
$ab = 3;
$cd = 2;
echo "ab: $ab, cd: $cd\n";
$ab = $BTG[ (($GTB[$ab] & 3) << 1) | (($GTB[$cd] & 4) >> 2) ];
$cd = $BTG[ (($GTB[$ab] & 1) << 2) | (($GTB[$cd] & 6) >> 1) ];
echo "case 4 result: $ab $cd\n\n";
//case 5
//switching input and output variables
$a = 3;
$b = 2;
echo "a: $a, b: $b\n";
$b = $BTG[ (($GTB[$a] & 3) << 1) | (($GTB[$b] & 4) >> 2) ];
$a = $BTG[ (($GTB[$a] & 1) << 2) | (($GTB[$b] & 6) >> 1) ];
echo "case 5 result: $b $a\n\n";
/*
In case 1 and 5,
Input variables and output variables are not the same in order and it gives me correct results.
In case 2 through 4,
Input variables are used as output variables in the same order and it gives me wrong results.
I only tested this on PHP 5.3.13p1 and PHP 7.3.33 and CentOS and Ubuntu, but I guess all php
versions have the same problem regardless of platforms.
This is very unexpected and silly.
*/
?>
```
Resulted in this output:
```
u: 3, d: 2
case 1 result: 6 3
u: 3, d: 2
case 2 result: 6 4
a: 3, b: 2
case 3 result: 6 4
ab: 3, cd: 2
case 4 result: 6 4
a: 3, b: 2
case 5 result: 6 3
```
But I expected this output instead:
```
u: 3, d: 2
case 1 result: 6 3
u: 3, d: 2
case 2 result: 6 3
a: 3, b: 2
case 3 result: 6 3
ab: 3, cd: 2
case 4 result: 6 3
a: 3, b: 2
case 5 result: 6 3
```
### PHP Version
PHP 7.3.33
### Operating System
Ubuntu 18.04.6 LTS