]> granicus.if.org Git - php/commitdiff
fix basic phar test issues, failing tests phar_oo_009.phpt and phar_buildfromiterator...
authorGreg Beaver <cellog@php.net>
Sun, 26 Jul 2009 01:24:12 +0000 (01:24 +0000)
committerGreg Beaver <cellog@php.net>
Sun, 26 Jul 2009 01:24:12 +0000 (01:24 +0000)
ext/phar/stream.c
ext/phar/tests/create_new_and_modify.phpt
ext/phar/tests/phar_ctx_001.phpt
ext/phar/tests/readfile_edgecases.phpt
ext/phar/tests/readfile_edgecasesU.phpt [new file with mode: 0644]

index e8d80ce68431cded36b8f04f4fd72a17c9377e5d..a357ba0da566bfaae0a55978ec1b062dd387b436 100644 (file)
@@ -207,18 +207,30 @@ static php_stream * phar_wrapper_open_url(php_stream_wrapper *wrapper, char *pat
                fpf = php_stream_alloc(&phar_ops, idata, NULL, mode);
                php_url_free(resource);
                efree(internal_file);
+#if PHP_MAJOR_VERSION >= 6
+               if (context && context->options && phar_find_key(HASH_OF(context->options), "phar", sizeof("phar"), (void**)&pzoption TSRMLS_CC)) {
+#else
                if (context && context->options && zend_hash_find(HASH_OF(context->options), "phar", sizeof("phar"), (void**)&pzoption) == SUCCESS) {
+#endif
                        pharcontext = HASH_OF(*pzoption);
                        if (idata->internal_file->uncompressed_filesize == 0
                                && idata->internal_file->compressed_filesize == 0
+#if PHP_MAJOR_VERSION >= 6
+                               && phar_find_key(pharcontext, "compress", sizeof("compress"), (void**)&pzoption TSRMLS_CC)
+#else
                                && zend_hash_find(pharcontext, "compress", sizeof("compress"), (void**)&pzoption) == SUCCESS
+#endif
                                && Z_TYPE_PP(pzoption) == IS_LONG
                                && (Z_LVAL_PP(pzoption) & ~PHAR_ENT_COMPRESSION_MASK) == 0
                        ) {
                                idata->internal_file->flags &= ~PHAR_ENT_COMPRESSION_MASK;
                                idata->internal_file->flags |= Z_LVAL_PP(pzoption);
                        }
+#if PHP_MAJOR_VERSION >= 6
+                       if (phar_find_key(pharcontext, "metadata", sizeof("metadata"), (void**)&pzoption TSRMLS_CC)) {
+#else
                        if (zend_hash_find(pharcontext, "metadata", sizeof("metadata"), (void**)&pzoption) == SUCCESS) {
+#endif
                                if (idata->internal_file->metadata) {
                                        zval_ptr_dtor(&idata->internal_file->metadata);
                                        idata->internal_file->metadata = NULL;
index 66587de023f9da97a36f09b076c4ecc3cde3a17a..d6c469d9cb7cb41c189a16a806f97ee3088cf580 100755 (executable)
@@ -27,9 +27,9 @@ file_put_contents($pname .'/b.php', "another!\n");
 $phar = new Phar($fname);
 $sig2 = $phar->getSignature();
 
-var_dump($sig1['hash']);
-var_dump($sig2['hash']);
-var_dump($sig1['hash'] != $sig2['hash']);
+var_dump($sig1[b'hash']);
+var_dump($sig2[b'hash']);
+var_dump($sig1[b'hash'] != $sig2[b'hash']);
 
 include $pname . '/a.php';
 include $pname . '/b.php';
index 14b7afc71ca2bc4066e18c326dbe26b39ce9501b..72edc5a99ebf3661d44458eb3943880ee5b4a555 100644 (file)
@@ -28,7 +28,7 @@ var_dump($phar['b']->isCompressed());
 var_dump(file_get_contents($pname . '/c'));
 var_dump($phar['c']->isCompressed());
 
-$context = stream_context_create(array('phar'=> array('compress'=>Phar::GZ, 'metadata' => array(2, 'hi' => 3))));
+$context = stream_context_create(array('phar'=> array('compress'=>Phar::GZ, 'metadata' => array(2, b'hi' => 3))));
 $context2 = stream_context_create(array('phar' => array('metadata' => array(4))));
 
 file_put_contents($pname . '/a', b'new a', 0); // no compression
index 1a78d7b5b0f9d8fa72d710333b8f880a9f41129e..2c93c8b2214dc4cc0f4b623dd493d4f3c9d115f2 100644 (file)
@@ -2,6 +2,7 @@
 Phar: test edge cases of readfile() function interception
 --SKIPIF--
 <?php if (!extension_loaded("phar")) die("skip");?>
+<?php if (version_compare(PHP_VERSION, "6.0", ">=")) die("skip requires php older than 6.0"); ?>
 --INI--
 phar.readonly=0
 --FILE--
diff --git a/ext/phar/tests/readfile_edgecasesU.phpt b/ext/phar/tests/readfile_edgecasesU.phpt
new file mode 100644 (file)
index 0000000..c26b45f
--- /dev/null
@@ -0,0 +1,61 @@
+--TEST--
+Phar: test edge cases of readfile() function interception
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip");?>
+<?php if (version_compare(PHP_VERSION, "6.0", "<")) die("skip requires php 6.0 or newer"); ?>
+--INI--
+phar.readonly=0
+--FILE--
+<?php
+Phar::interceptFileFuncs();
+$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
+$pname = 'phar://' . $fname;
+
+chdir(dirname(__FILE__));
+file_put_contents($fname, "blah\n");
+file_put_contents("foob", "test\n");
+readfile($fname);
+unlink($fname);
+mkdir($pname . '/oops');
+file_put_contents($pname . '/foo/hi', '<?php
+readfile("foo/" . basename(__FILE__));
+$context = stream_context_create();
+readfile("foob");
+set_include_path("' . addslashes(dirname(__FILE__)) . '");
+readfile("foob", true);
+readfile("./hi", 0, $context);
+readfile("../oops");
+?>
+');
+include $pname . '/foo/hi';
+?>
+===DONE===
+--CLEAN--
+<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
+<?php rmdir(dirname(__FILE__) . '/poo'); ?>
+<?php unlink(dirname(__FILE__) . '/foob'); ?>
+--EXPECTF--
+blah
+<?php
+readfile("foo/" . basename(__FILE__));
+$context = stream_context_create();
+readfile("foob");
+set_include_path("%stests");
+readfile("foob", true);
+readfile("./hi", 0, $context);
+readfile("../oops");
+?>
+test
+test
+<?php
+readfile("foo/" . basename(__FILE__));
+$context = stream_context_create();
+readfile("foob");
+set_include_path("%stests");
+readfile("foob", true);
+readfile("./hi", 0, $context);
+readfile("../oops");
+?>
+
+Warning: readfile(phar://%sreadfile_edgecasesU.phar.php/oops): failed to open stream: phar error: path "oops" is a directory in phar://%sreadfile_edgecasesU.phar.php/foo/hi on line %d
+===DONE===
\ No newline at end of file