From 47cef85c221ae3b11bd48e1f3451a2c6b82c46da Mon Sep 17 00:00:00 2001 From: Greg Beaver Date: Fri, 14 Dec 2007 18:42:57 +0000 Subject: [PATCH] fix alias overloading detection on windows --- ext/phar/phar.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ext/phar/phar.c b/ext/phar/phar.c index a462a24ebc..9740a7f978 100644 --- a/ext/phar/phar.c +++ b/ext/phar/phar.c @@ -767,14 +767,27 @@ phar_entry_data *phar_get_or_create_entry_data(char *fname, int fname_len, char static int phar_open_loaded(char *fname, int fname_len, char *alias, int alias_len, int options, phar_archive_data** pphar, char **error TSRMLS_DC) /* {{{ */ { phar_archive_data *phar; +#ifdef PHP_WIN32 + char *unixfname; +#endif if (error) { *error = NULL; } +#ifdef PHP_WIN32 + unixfname = estrndup(fname, fname_len); + phar_unixify_path_separators(unixfname, fname_len); + if (SUCCESS == phar_get_archive(&phar, unixfname, fname_len, alias, alias_len, error TSRMLS_CC) + && ((alias && fname_len == phar->fname_len + && !strncmp(unixfname, phar->fname, fname_len)) || !alias) + ) { + efree(unixfname); +#else if (SUCCESS == phar_get_archive(&phar, fname, fname_len, alias, alias_len, error TSRMLS_CC) && ((alias && fname_len == phar->fname_len && !strncmp(fname, phar->fname, fname_len)) || !alias) ) { +#endif /* logic above is as follows: If an explicit alias was requested, ensure the filename passed in matches the phar's filename. @@ -785,6 +798,9 @@ static int phar_open_loaded(char *fname, int fname_len, char *alias, int alias_l } return SUCCESS; } else { +#ifdef PHP_WIN32 + efree(unixfname); +#endif if (pphar) { *pphar = NULL; } -- 2.50.1