summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-04-24 17:24:25 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2020-04-27 09:30:57 +0200
commit29968d8f992559080bc9d5d4eab37f1fad8094df (patch)
treeb5f48db759b49a5d6d1615568b1708110ce4d9c1
parentb962d2e36ff3014257c8e87dfefe2a9c591568b9 (diff)
downloadphp-git-29968d8f992559080bc9d5d4eab37f1fad8094df.tar.gz
Fix #79470: PHP incompatible with 3rd party file system on demand
We add support for Activision HSM (`IO_REPARSE_TAG_ACTIVISION_HSM`) and VFS for Git (`IO_REPARSE_TAG_PROJFS`). The latter fixes bug #78784.
-rw-r--r--NEWS4
-rw-r--r--Zend/zend_virtual_cwd.c12
2 files changed, 15 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 1831014f24..c96ee110d0 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,10 @@ PHP NEWS
. Fixed bug #79434 (PHP 7.3 and PHP-7.4 crash with NULL-pointer dereference
on !CS constant). (Nikita)
. Fixed bug #79477 (casting object into array creates references). (Nikita)
+ . Fixed bug #79470 (PHP incompatible with 3rd party file system on demand).
+ (cmb)
+ . Fixed bug #78784 (Unable to interact with files inside a VFS for Git
+ repository). (cmb)
- DOM:
. Fixed bug #78221 (DOMNode::normalize() doesn't remove empty text nodes).
diff --git a/Zend/zend_virtual_cwd.c b/Zend/zend_virtual_cwd.c
index c523f40dc9..253ed8c420 100644
--- a/Zend/zend_virtual_cwd.c
+++ b/Zend/zend_virtual_cwd.c
@@ -55,6 +55,14 @@
#define IO_REPARSE_TAG_ONEDRIVE (0x80000021L)
#endif
+# ifndef IO_REPARSE_TAG_ACTIVISION_HSM
+# define IO_REPARSE_TAG_ACTIVISION_HSM (0x00000047L)
+# endif
+
+# ifndef IO_REPARSE_TAG_PROJFS
+# define IO_REPARSE_TAG_PROJFS (0x9000001CL)
+# endif
+
# ifndef VOLUME_NAME_NT
# define VOLUME_NAME_NT 0x2
# endif
@@ -1002,7 +1010,9 @@ retry:
else if (pbuffer->ReparseTag == IO_REPARSE_TAG_DEDUP ||
/* Starting with 1709. */
(pbuffer->ReparseTag & ~IO_REPARSE_TAG_CLOUD_MASK) == IO_REPARSE_TAG_CLOUD ||
- IO_REPARSE_TAG_ONEDRIVE == pbuffer->ReparseTag) {
+ IO_REPARSE_TAG_ONEDRIVE == pbuffer->ReparseTag ||
+ IO_REPARSE_TAG_ACTIVISION_HSM == pbuffer->ReparseTag ||
+ IO_REPARSE_TAG_PROJFS == pbuffer->ReparseTag) {
isabsolute = 1;
substitutename = malloc((len + 1) * sizeof(char));
if (!substitutename) {