]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.3' into PHP-7.4
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 2 Jul 2019 10:28:46 +0000 (12:28 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 2 Jul 2019 10:28:46 +0000 (12:28 +0200)
1  2 
ext/opcache/ZendAccelerator.c

index 5b49159421d9da880e0717a706d629a28cadd5c9,90397bf8d797a631053a1c5bddd7287ad1268ff1..ee9f45609b1c420432927f9812f55cbafb05de81
@@@ -1879,7 -1904,31 +1879,30 @@@ zend_op_array *file_cache_compile_file(
  
        return op_array;
  }
 -#endif
  
+ int check_persistent_script_access(zend_persistent_script *persistent_script)
+ {
+     char *phar_path, *ptr;
+     int ret;
+     if ((ZSTR_LEN(persistent_script->script.filename)<sizeof("phar://.phar")) ||
+          memcmp(ZSTR_VAL(persistent_script->script.filename), "phar://", sizeof("phar://")-1)) {
+         return access(ZSTR_VAL(persistent_script->script.filename), R_OK) != 0;
+     } else {
+         /* we got a cached file from .phar, so we have to strip prefix and path inside .phar to check access() */
+         phar_path = estrdup(ZSTR_VAL(persistent_script->script.filename)+sizeof("phar://")-1);
+         if ((ptr = strstr(phar_path, ".phar/")) != NULL)
+         {
+             *(ptr+sizeof(".phar/")-2) = 0; /* strip path inside .phar file */
+         }
+         ret = access(phar_path, R_OK) != 0;
+         efree(phar_path);
+         return ret;
+     }
+ }
  /* zend_compile() replacement */
  zend_op_array *persistent_compile_file(zend_file_handle *file_handle, int type)
  {