Bug #78101 [Fbk->Asn]: Incorrect behaviour for substr on Windows

From: Date: Tue, 04 Jun 2019 17:59:21 +0000
Subject: Bug #78101 [Fbk->Asn]: Incorrect behaviour for substr on Windows
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-221116@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=78101&edit=1

 ID:                 78101
 User updated by:    mishamosher at gmail dot com
 Reported by:        mishamosher at gmail dot com
-Summary:            Icorrect behaviour for substr on Windows
+Summary:            Incorrect behaviour for substr on Windows
-Status:             Feedback
+Status:             Assigned
 Type:               Bug
 Package:            opcache
 Operating System:   Windows 10 1903 64-bits
 PHP Version:        7.2.19
 Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

Hello cmb@php.net,

Results with OPCache on:
string(6) "2f6573" string(2) "ff"

Results with OPCache off:
string(6) "2f6573" string(2) "2f"


Previous Comments:
------------------------------------------------------------------------
[2019-06-04 09:02:49] cmb@php.net

Please run the following variation of your script, and report the
results:

    <?php
    $in = "/es";
    $out = substr($in, 0, 1);
    var_dump(bin2hex($in), bin2hex($out));
    ?>

------------------------------------------------------------------------
[2019-06-04 01:56:44] requinix@php.net

If removing opcache makes your problem go away then this may be a bug after all.

------------------------------------------------------------------------
[2019-06-04 01:00:35] mishamosher at gmail dot com

Hello subjective@php.net,

Are your results from running the script with PHP as an Apache module?

I've thoroughly tried over and over again, and no matter what, I always get the wrong results.

var_dump reports <<string(3) "/es">>.

I've been able to pin-point the issue to the OPCache extension. If I simply remove
"zend_extension=opcache" from php.ini, everything works as it should.

Please note that I'm experiencing this issue only with PHP 7.2.19 when it is working as an
Apache module.

I can use PHP 7.2.11, 5.6.40, 7.3.6, etc., with OPCache enabled and everything works OK in there.

As a final note, what can I do to 'ring' attention to an existing filed bug? It is about
this one: https://bugs.php.net/bug.php?id=77014
- at least to know if it is a bug or intended behaviour.

------------------------------------------------------------------------
[2019-06-03 21:24:05] subjective@php.net

I tested it on Windows using the following script:

var_dump(
  substr("/es", 0, 1)
);
var_dump(
  substr("\xEF\xBB\xBF/es", 0, 1)
);

Output:

string(1) "/"
string(1) "�"


In general try using var_dump() on the source string. It will report the byte length, so you will
notice invisible characters.

------------------------------------------------------------------------
[2019-06-03 20:55:31] mishamosher at gmail dot com

Hello requinix@php.net,

I appreciate your attention into the matter.

I know for sure that there are no multibyte strings or invisible characters in my testing. Functions
strlen, mb_strlen and mb_detect_encoding return 3, 3 and "ASCII" respectively.

In the mantime, I've just finished configuring PHP 7.2.11 and PHP 7.3.6, as Apache modules, and
they both do not exibit this issue with the very same test file and test environment.

The real mistery for me is why specifically PHP 7.2.19 does not want to work as it should. Please
note that the issue presents itself only when I run PHP 7.2.19 as an Apache module. The issue does
not occur when I run PHP via CMD (php.exe -f script.php).

Is there any specific test or debug information that I can provide to further identify the issue?

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=78101


--
Edit this bug report at https://bugs.php.net/bug.php?id=78101&edit=1


Thread (11 messages)

« previous php.bugs (#221116) next »