--- /dev/null
+--TEST--\r
+Bug #55124 (recursive mkdir fails with current (dot) directory in path)\r
+--FILE--\r
+<?php\r
+$old_dir_path = getcwd();\r
+chdir(__DIR__);\r
+mkdir('a/./b', 0755, true);\r
+if (is_dir('a/b')) {\r
+ rmdir('a/b');\r
+}\r
+if (is_dir('/a')) {\r
+ rmdir('a');\r
+}\r
+chdir($old_dir_path);\r
+echo "OK";\r
+?>\r
+--EXPECT--\r
+OK\r
ret = php_mkdir(dir, mode TSRMLS_CC);
} else {
/* we look for directory separator from the end of string, thus hopefuly reducing our work load */
- char *e, *buf;
+ char *e;
struct stat sb;
int dir_len = strlen(dir);
int offset = 0;
+ char buf[MAXPATHLEN];
- buf = estrndup(dir, dir_len);
-
-#ifdef PHP_WIN32
- e = buf;
- while (*e) {
- if (*e == '/') {
- *e = DEFAULT_SLASH;
- }
- e++;
+ if (!expand_filepath_with_mode(dir, buf, NULL, 0, CWD_EXPAND TSRMLS_CC)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid path");
+ return 0;
}
-#else
- e = buf + dir_len;
-#endif
+
+ e = buf + strlen(buf);
if ((p = memchr(buf, DEFAULT_SLASH, dir_len))) {
offset = p - buf + 1;
}
}
}
- efree(buf);
}
if (ret < 0) {
/* Failure */