random: Initialize the mode field when seeding in php_random_default_status() (#13690)

This is not just an issue due to missing initialization since moving the state
struct directly into the module globals. In earlier versions changing the mode
to `MT_RAND_PHP` within a single request would also affect the mode for
subsequent requests.

Original commit message follows:

This is a follow-up fix for GH-13579. The issue was detected in the nightly
MSAN build.

(cherry picked from commit bf0abd1629)
This commit is contained in:
Tim Düsterhus 2024-03-13 20:13:48 +01:00 committed by GitHub
parent 6985aff7c3
commit f34721cabd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 3 additions and 0 deletions

2
NEWS
View File

@ -26,6 +26,8 @@ PHP NEWS
- Random:
. Fixed bug GH-13544 (Pre-PHP 8.2 compatibility for mt_srand with unknown
modes). (timwolla)
. Fixed bug GH-13690 (Global Mt19937 is not properly reset in-between
requests when MT_RAND_PHP is used). (timwolla)
- Session:
. Fixed bug GH-13680 (Segfault with session_decode and compilation error).

View File

@ -334,6 +334,7 @@ PHPAPI php_random_status *php_random_default_status(void)
php_random_status *status = RANDOM_G(mt19937);
if (!RANDOM_G(mt19937_seeded)) {
((php_random_status_state_mt19937 *)status->state)->mode = MT_RAND_MT19937;
php_random_mt19937_seed_default(status->state);
RANDOM_G(mt19937_seeded) = true;
}