cellog                                   Thu, 23 Jul 2009 17:04:24 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=284660

Log:
fix PHP Bug #48377: error message unclear on converting phar with existing file

Bug: http://bugs.php.net/48377 (Open) error message unclear on converting phar 
with existing file
      
Changed paths:
    U   pecl/phar/trunk/package.php
    U   pecl/phar/trunk/phar_object.c
    A   pecl/phar/trunk/tests/bug48377.2.phpt
    A   pecl/phar/trunk/tests/bug48377.phpt
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/ext/phar/phar_object.c
    A   php/php-src/branches/PHP_5_3/ext/phar/tests/bug48377.2.phpt
    A   php/php-src/branches/PHP_5_3/ext/phar/tests/bug48377.phpt
    U   php/php-src/trunk/ext/phar/phar_object.c
    A   php/php-src/trunk/ext/phar/tests/bug48377.2.phpt
    A   php/php-src/trunk/ext/phar/tests/bug48377.phpt

Modified: pecl/phar/trunk/package.php
===================================================================
--- pecl/phar/trunk/package.php	2009-07-23 16:40:47 UTC (rev 284659)
+++ pecl/phar/trunk/package.php	2009-07-23 17:04:24 UTC (rev 284660)
@@ -52,6 +52,7 @@
  fixed PHP Bug #48783: make install will fail saying phar file exists
  fixed PHP Bug #48740: PHAR install fails when INSTALL_ROOT is not the final install location
  fixed PHP Bug #48681: openssl signature verification for tar archives broken
+ fixed PHP Bug #48377: error message unclear on converting phar with existing file
  fixed isset() on sub-directories (isset("blah") if file "blah/foo.php" exists)
 Changes since 2.0.0RC1:
  security vulnerability in handling of long tar filenames fixed

Modified: pecl/phar/trunk/phar_object.c
===================================================================
--- pecl/phar/trunk/phar_object.c	2009-07-23 16:40:47 UTC (rev 284659)
+++ pecl/phar/trunk/phar_object.c	2009-07-23 17:04:24 UTC (rev 284660)
@@ -2043,6 +2043,7 @@
 	int ext_len = ext ? strlen(ext) : 0;
 	int oldname_len;
 	phar_archive_data **pphar = NULL;
+	php_stream_statbuf ssb;

 	if (!ext) {
 		if (phar->is_zip) {
@@ -2113,6 +2114,8 @@
 	spprintf(&newname, 0, "%s.%s", strtok(basename, "."), ext);
 	efree(basename);

+
+
 	basepath = estrndup(oldpath, (strlen(oldpath) - oldname_len));
 	phar->fname_len = spprintf(&newpath, 0, "%s%s", basepath, newname);
 	phar->fname = newpath;
@@ -2148,6 +2151,11 @@
 		return NULL;
 	}
 its_ok:
+	if (SUCCESS == php_stream_stat_path(newpath, &ssb)) {
+		efree(oldpath);
+		zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "phar \"%s\" exists and must be unlinked prior to conversion", newpath);
+		return NULL;
+	}
 	if (!phar->is_data) {
 		if (SUCCESS != phar_detect_phar_fname_ext(newpath, phar->fname_len, (const char **) &(phar->ext), &(phar->ext_len), 1, 1, 1 TSRMLS_CC)) {
 			efree(oldpath);

Added: pecl/phar/trunk/tests/bug48377.2.phpt
===================================================================
--- pecl/phar/trunk/tests/bug48377.2.phpt	                        (rev 0)
+++ pecl/phar/trunk/tests/bug48377.2.phpt	2009-07-23 17:04:24 UTC (rev 284660)
@@ -0,0 +1,25 @@
+--TEST--
+Phar: PHP bug #48377 "error message unclear on converting phar with existing file" test #2
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--INI--
+phar.require_hash=0
+phar.readonly=0
+--FILE--
+<?php
+$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.zip';
+
+$phar = new PharData($fname);
+$phar['x'] = 'hi';
+try {
+	$phar->convertToData(Phar::ZIP, Phar::NONE, '.2.phar.zip');
+} catch (BadMethodCallException $e) {
+	echo $e->getMessage(),"\n";
+}
+?>
+===DONE===
+--CLEAN--
+<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.zip');?>
+--EXPECTF--
+data phar "%sbug48377.2.phar.zip" has invalid extension 2.phar.zip
+===DONE===
\ No newline at end of file

Added: pecl/phar/trunk/tests/bug48377.phpt
===================================================================
--- pecl/phar/trunk/tests/bug48377.phpt	                        (rev 0)
+++ pecl/phar/trunk/tests/bug48377.phpt	2009-07-23 17:04:24 UTC (rev 284660)
@@ -0,0 +1,29 @@
+--TEST--
+Phar: PHP bug #48377 "error message unclear on converting phar with existing file"
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--INI--
+phar.require_hash=0
+phar.readonly=0
+--FILE--
+<?php
+$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar';
+$fname2 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.zip';
+
+touch($fname2);
+
+$phar = new Phar($fname, 0, 'a.phar');
+$phar['x'] = 'hi';
+try {
+	$phar->convertToData(Phar::ZIP, Phar::NONE, 'zip');
+} catch (BadMethodCallException $e) {
+	echo $e->getMessage(),"\n";
+}
+?>
+===DONE===
+--CLEAN--
+<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');?>
+<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.zip');?>
+--EXPECTF--
+phar "%sbug48377.zip" exists and must be unlinked prior to conversion
+===DONE===
\ No newline at end of file

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS	2009-07-23 16:40:47 UTC (rev 284659)
+++ php/php-src/branches/PHP_5_3/NEWS	2009-07-23 17:04:24 UTC (rev 284660)
@@ -43,6 +43,8 @@
   components). (Ilia)
 - Fixed bug #48681 (openssl signature verification for tar archives broken).
   (Greg)
+- Fixed bug #48377 (error message unclear on converting phar with existing file).
+  (Greg)
 - Fixed bug #48247 (Infinite loop and possible crash during startup with
   errors when errors are logged). (Jani)
 - Fixed bug #48116 (Fixed build with Openssl 1.0). (Pierre,

Modified: php/php-src/branches/PHP_5_3/ext/phar/phar_object.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/phar/phar_object.c	2009-07-23 16:40:47 UTC (rev 284659)
+++ php/php-src/branches/PHP_5_3/ext/phar/phar_object.c	2009-07-23 17:04:24 UTC (rev 284660)
@@ -2037,6 +2037,7 @@
 	int ext_len = ext ? strlen(ext) : 0;
 	int oldname_len;
 	phar_archive_data **pphar = NULL;
+	php_stream_statbuf ssb;

 	if (!ext) {
 		if (phar->is_zip) {
@@ -2107,6 +2108,8 @@
 	spprintf(&newname, 0, "%s.%s", strtok(basename, "."), ext);
 	efree(basename);

+
+
 	basepath = estrndup(oldpath, (strlen(oldpath) - oldname_len));
 	phar->fname_len = spprintf(&newpath, 0, "%s%s", basepath, newname);
 	phar->fname = newpath;
@@ -2142,6 +2145,11 @@
 		return NULL;
 	}
 its_ok:
+	if (SUCCESS == php_stream_stat_path(newpath, &ssb)) {
+		efree(oldpath);
+		zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "phar \"%s\" exists and must be unlinked prior to conversion", newpath);
+		return NULL;
+	}
 	if (!phar->is_data) {
 		if (SUCCESS != phar_detect_phar_fname_ext(newpath, phar->fname_len, (const char **) &(phar->ext), &(phar->ext_len), 1, 1, 1 TSRMLS_CC)) {
 			efree(oldpath);

Added: php/php-src/branches/PHP_5_3/ext/phar/tests/bug48377.2.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/phar/tests/bug48377.2.phpt	                        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/phar/tests/bug48377.2.phpt	2009-07-23 17:04:24 UTC (rev 284660)
@@ -0,0 +1,25 @@
+--TEST--
+Phar: PHP bug #48377 "error message unclear on converting phar with existing file" test #2
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--INI--
+phar.require_hash=0
+phar.readonly=0
+--FILE--
+<?php
+$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.zip';
+
+$phar = new PharData($fname);
+$phar['x'] = 'hi';
+try {
+	$phar->convertToData(Phar::ZIP, Phar::NONE, '.2.phar.zip');
+} catch (BadMethodCallException $e) {
+	echo $e->getMessage(),"\n";
+}
+?>
+===DONE===
+--CLEAN--
+<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.zip');?>
+--EXPECTF--
+data phar "%sbug48377.2.phar.zip" has invalid extension 2.phar.zip
+===DONE===
\ No newline at end of file

Added: php/php-src/branches/PHP_5_3/ext/phar/tests/bug48377.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/phar/tests/bug48377.phpt	                        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/phar/tests/bug48377.phpt	2009-07-23 17:04:24 UTC (rev 284660)
@@ -0,0 +1,29 @@
+--TEST--
+Phar: PHP bug #48377 "error message unclear on converting phar with existing file"
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--INI--
+phar.require_hash=0
+phar.readonly=0
+--FILE--
+<?php
+$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar';
+$fname2 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.zip';
+
+touch($fname2);
+
+$phar = new Phar($fname, 0, 'a.phar');
+$phar['x'] = 'hi';
+try {
+	$phar->convertToData(Phar::ZIP, Phar::NONE, 'zip');
+} catch (BadMethodCallException $e) {
+	echo $e->getMessage(),"\n";
+}
+?>
+===DONE===
+--CLEAN--
+<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');?>
+<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.zip');?>
+--EXPECTF--
+phar "%sbug48377.zip" exists and must be unlinked prior to conversion
+===DONE===
\ No newline at end of file

Modified: php/php-src/trunk/ext/phar/phar_object.c
===================================================================
--- php/php-src/trunk/ext/phar/phar_object.c	2009-07-23 16:40:47 UTC (rev 284659)
+++ php/php-src/trunk/ext/phar/phar_object.c	2009-07-23 17:04:24 UTC (rev 284660)
@@ -2037,6 +2037,7 @@
 	int ext_len = ext ? strlen(ext) : 0;
 	int oldname_len;
 	phar_archive_data **pphar = NULL;
+	php_stream_statbuf ssb;

 	if (!ext) {
 		if (phar->is_zip) {
@@ -2107,6 +2108,8 @@
 	spprintf(&newname, 0, "%s.%s", strtok(basename, "."), ext);
 	efree(basename);

+
+
 	basepath = estrndup(oldpath, (strlen(oldpath) - oldname_len));
 	phar->fname_len = spprintf(&newpath, 0, "%s%s", basepath, newname);
 	phar->fname = newpath;
@@ -2142,6 +2145,11 @@
 		return NULL;
 	}
 its_ok:
+	if (SUCCESS == php_stream_stat_path(newpath, &ssb)) {
+		efree(oldpath);
+		zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "phar \"%s\" exists and must be unlinked prior to conversion", newpath);
+		return NULL;
+	}
 	if (!phar->is_data) {
 		if (SUCCESS != phar_detect_phar_fname_ext(newpath, phar->fname_len, (const char **) &(phar->ext), &(phar->ext_len), 1, 1, 1 TSRMLS_CC)) {
 			efree(oldpath);

Added: php/php-src/trunk/ext/phar/tests/bug48377.2.phpt
===================================================================
--- php/php-src/trunk/ext/phar/tests/bug48377.2.phpt	                        (rev 0)
+++ php/php-src/trunk/ext/phar/tests/bug48377.2.phpt	2009-07-23 17:04:24 UTC (rev 284660)
@@ -0,0 +1,25 @@
+--TEST--
+Phar: PHP bug #48377 "error message unclear on converting phar with existing file" test #2
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--INI--
+phar.require_hash=0
+phar.readonly=0
+--FILE--
+<?php
+$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.zip';
+
+$phar = new PharData($fname);
+$phar['x'] = 'hi';
+try {
+	$phar->convertToData(Phar::ZIP, Phar::NONE, '.2.phar.zip');
+} catch (BadMethodCallException $e) {
+	echo $e->getMessage(),"\n";
+}
+?>
+===DONE===
+--CLEAN--
+<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.zip');?>
+--EXPECTF--
+data phar "%sbug48377.2.phar.zip" has invalid extension 2.phar.zip
+===DONE===
\ No newline at end of file

Added: php/php-src/trunk/ext/phar/tests/bug48377.phpt
===================================================================
--- php/php-src/trunk/ext/phar/tests/bug48377.phpt	                        (rev 0)
+++ php/php-src/trunk/ext/phar/tests/bug48377.phpt	2009-07-23 17:04:24 UTC (rev 284660)
@@ -0,0 +1,29 @@
+--TEST--
+Phar: PHP bug #48377 "error message unclear on converting phar with existing file"
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--INI--
+phar.require_hash=0
+phar.readonly=0
+--FILE--
+<?php
+$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar';
+$fname2 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.zip';
+
+touch($fname2);
+
+$phar = new Phar($fname, 0, 'a.phar');
+$phar['x'] = 'hi';
+try {
+	$phar->convertToData(Phar::ZIP, Phar::NONE, 'zip');
+} catch (BadMethodCallException $e) {
+	echo $e->getMessage(),"\n";
+}
+?>
+===DONE===
+--CLEAN--
+<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');?>
+<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.zip');?>
+--EXPECTF--
+phar "%sbug48377.zip" exists and must be unlinked prior to conversion
+===DONE===
\ No newline at end of file
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to