From: Dmitry Stogov Date: Wed, 16 Nov 2016 22:14:23 +0000 (+0300) Subject: Merge branch 'PHP-5.6' into PHP-7.0 X-Git-Tag: php-7.0.14RC1~40 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=27542d9c9dc3a2971517d4afadde8a408c034d17;p=php Merge branch 'PHP-5.6' into PHP-7.0 * PHP-5.6: Accorate handling of too big inodes of chroot directories --- 27542d9c9dc3a2971517d4afadde8a408c034d17 diff --cc ext/opcache/ZendAccelerator.c index 230cc3d20c,7e8a444e7f..1491c88097 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@@ -2091,18 -2155,14 +2091,16 @@@ static void accel_activate(void if (stat("/", &buf) != 0) { ZCG(root_hash) = 0; } else { - zend_ulong x = buf.st_ino; - - #if SIZEOF_ZEND_LONG == 4 - x = ((x >> 16) ^ x) * 0x45d9f3b; - x = ((x >> 16) ^ x) * 0x45d9f3b; - x = (x >> 16) ^ x; - #elif SIZEOF_ZEND_LONG == 8 - x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; - x = (x ^ (x >> 27)) * 0x94d049bb133111eb; - x = x ^ (x >> 31); - #endif - ZCG(root_hash) = x; + ZCG(root_hash) = buf.st_ino; + if (sizeof(buf.st_ino) > sizeof(ZCG(root_hash))) { + if (ZCG(root_hash) != buf.st_ino) { - zend_alter_ini_entry("opcache.enable", sizeof("opcache.enable"), "0", 1, ZEND_INI_SYSTEM, ZEND_INI_STAGE_RUNTIME); ++ zend_string *key = zend_string_init("opcache.enable", sizeof("opcache.enable")-1, 0); ++ zend_alter_ini_entry_chars(key, "0", 1, ZEND_INI_SYSTEM, ZEND_INI_STAGE_RUNTIME); ++ zend_string_release(key); + zend_accel_error(ACCEL_LOG_WARNING, "Can't cache files in chroot() directory with too big inode"); + return; + } + } } } else { ZCG(root_hash) = 0;