phar_unixify_path_separators(mydata->fname, fname_len);
#endif
mydata->fname_len = fname_len;
- mydata->alias = alias ? estrndup(alias, alias_len) : estrndup(fname, fname_len);
+ mydata->alias = alias ? estrndup(alias, alias_len) : estrndup(mydata->fname, fname_len);
mydata->alias_len = alias ? alias_len : fname_len;
mydata->sig_flags = sig_flags;
mydata->sig_len = sig_len;
}
/* }}} */
+#ifdef PHP_WIN32
+static inline void phar_unixify_path_separators(char *path, int path_len) /* {{{ */
+{
+ char *s;
+
+ /* unixify win paths */
+ for (s = path; s - path < path_len; s++) {
+ if (*s == '\\') {
+ *s = '/';
+ }
+ }
+}
+/* }}} */
+#endif
/* adapted from format_octal() in libarchive
*
* Copyright (c) 2003-2007 Tim Kientzle
size_t pos = 0, read;
tar_header *hdr;
php_uint32 sum1, sum2, size, old;
- phar_archive_data *myphar;
+ phar_archive_data *myphar, **actual;
if (error) {
*error = NULL;
read = php_stream_read(fp, buf, sizeof(buf));
} while (read != 0);
myphar->fname = estrndup(fname, fname_len);
+#ifdef PHP_WIN32
+ phar_unixify_path_separators(myphar->fname, fname_len);
+#endif
myphar->fname_len = fname_len;
myphar->fp = fp;
phar_request_initialize(TSRMLS_C);
- zend_hash_add(&(PHAR_GLOBALS->phar_fname_map), fname, fname_len, (void*)&myphar, sizeof(phar_archive_data*), NULL);
+ if (SUCCESS != zend_hash_add(&(PHAR_GLOBALS->phar_fname_map), myphar->fname, fname_len, (void*)&myphar, sizeof(phar_archive_data*), (void **)&actual)) {
+ if (error) {
+ spprintf(error, 4096, "phar error: Unable to add tar-based phar \"%s\" to phar registry", fname);
+ }
+ php_stream_close(fp);
+ zend_hash_destroy(&myphar->manifest);
+ efree(myphar);
+ return FAILURE;
+ }
+ myphar = *actual;
if (actual_alias) {
myphar->is_explicit_alias = 1;
zend_hash_add(&(PHAR_GLOBALS->phar_alias_map), actual_alias, myphar->alias_len, (void*)&myphar, sizeof(phar_archive_data*), NULL);
} else {
- myphar->alias = estrndup(fname, fname_len);
+ myphar->alias = estrndup(myphar->fname, fname_len);
myphar->alias_len = fname_len;
myphar->is_explicit_alias = 0;
}
/* ignore all errors in loading up manifest */
zip_error_clear(zip);
- zend_hash_add(&(PHAR_GLOBALS->phar_fname_map), fname, fname_len, (void*)&mydata, sizeof(phar_archive_data*), NULL);
+ zend_hash_add(&(PHAR_GLOBALS->phar_fname_map), mydata->fname, fname_len, (void*)&mydata, sizeof(phar_archive_data*), NULL);
if (register_alias) {
mydata->is_explicit_alias = 1;
zend_hash_add(&(PHAR_GLOBALS->phar_alias_map), alias, alias_len, (void*)&mydata, sizeof(phar_archive_data*), NULL);