diff options
-rw-r--r-- | TSRM/tsrm_virtual_cwd.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/TSRM/tsrm_virtual_cwd.c b/TSRM/tsrm_virtual_cwd.c index 1f115f6646..a6bdc8d393 100644 --- a/TSRM/tsrm_virtual_cwd.c +++ b/TSRM/tsrm_virtual_cwd.c @@ -249,9 +249,17 @@ CWD_API int php_sys_readlink(const char *link, char *target, size_t target_len){ /* Skip first 4 characters if they are "\??\" */ if(target[0] == '\\' && target[1] == '\\' && target[2] == '?' && target[3] == '\\') { char tmp[MAXPATHLEN]; - + unsigned int offset = 4; dwRet -= 4; - memcpy(tmp, target + 4, dwRet); + + /* \??\UNC\ */ + if (dwRet > 7 && target[4] == 'U' && target[5] == 'N' && target[6] == 'C') { + offset += 2; + dwRet -= 2; + target[offset] = '\\'; + } + + memcpy(tmp, target + offset, dwRet); memcpy(target, tmp, dwRet); } } |