/* set up user overrides */
#define PHAR_SET_USER_MIME(ret) \
- mime.mime = Z_STRVAL_P(val); \
- mime.len = Z_STRLEN_P(val); \
+ if (Z_TYPE_PP(val) == IS_LONG) { \
+ mime.mime = ""; \
+ mime.len = 0; \
+ } else { \
+ mime.mime = Z_STRVAL_PP(val); \
+ mime.len = Z_STRLEN_PP(val); \
+ } \
mime.type = ret; \
- zend_hash_update(&mimetypes, key, keylen, (void *)&mime, sizeof(phar_mime_type), NULL);
+ zend_hash_update(&mimetypes, key, keylen-1, (void *)&mime, sizeof(phar_mime_type), NULL);
if (mimeoverride) {
if (!zend_hash_num_elements(Z_ARRVAL_P(mimeoverride))) {
goto no_mimes;
}
for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(mimeoverride)); SUCCESS == zend_hash_has_more_elements(Z_ARRVAL_P(mimeoverride)); zend_hash_move_forward(Z_ARRVAL_P(mimeoverride))) {
- zval *val;
+ zval **val;
char *key;
uint keylen;
ulong intkey;
#endif
RETURN_FALSE;
}
- switch (Z_TYPE_P(val)) {
+ switch (Z_TYPE_PP(val)) {
case IS_LONG :
- if (Z_LVAL_P(val) == PHAR_MIME_PHP || Z_LVAL_P(val) == PHAR_MIME_PHPS) {
- PHAR_SET_USER_MIME(Z_LVAL_P(val))
+ if (Z_LVAL_PP(val) == PHAR_MIME_PHP || Z_LVAL_PP(val) == PHAR_MIME_PHPS) {
+ PHAR_SET_USER_MIME(Z_LVAL_PP(val))
} else {
zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Unknown mime type specifier used, only Phar::PHP, Phar::PHPS and a mime type string are allowed");
phar_entry_delref(phar TSRMLS_CC);
PHAR_SET_USER_MIME(PHAR_MIME_OTHER)
break;
default :
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Unknown mime type specifier used, only Phar::PHP, Phar::PHPS and a mime type string are allowed");
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Unknown mime type specifier used (not a string or int), only Phar::PHP, Phar::PHPS and a mime type string are allowed");
phar_entry_delref(phar TSRMLS_CC);
#ifdef PHP_WIN32
efree(fname);
--TEST--
-Phar front controller rewrite array invalid
+Phar front controller mime type extension is not a string
--SKIPIF--
<?php if (!extension_loaded("phar")) die("skip"); ?>
--ENV--
--- /dev/null
+--TEST--
+Phar front controller mime type unknown int
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--ENV--
+SCRIPT_NAME=/frontcontroller12.php/a.php
+REQUEST_URI=/frontcontroller12.php/a.php
+--FILE_EXTERNAL--
+frontcontroller6.phar
+--EXPECTHEADERS--
+Content-type: text/html
+--EXPECTF--
+Fatal error: Uncaught exception 'UnexpectedValueException' with message 'Unknown mime type specifier used, only Phar::PHP, Phar::PHPS and a mime type string are allowed' in %sfrontcontroller12.php:2
+Stack trace:
+#0 %sfrontcontroller12.php(2): Phar::webPhar('whatever', 'index.php', '', Array)
+#1 {main}
+ thrown in %sfrontcontroller12.php on line 2
\ No newline at end of file
--- /dev/null
+--TEST--
+Phar front controller mime type not string/int
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--ENV--
+SCRIPT_NAME=/frontcontroller13.php/a.php
+REQUEST_URI=/frontcontroller13.php/a.php
+--FILE_EXTERNAL--
+frontcontroller7.phar
+--EXPECTHEADERS--
+Content-type: text/html
+--EXPECTF--
+Fatal error: Uncaught exception 'UnexpectedValueException' with message 'Unknown mime type specifier used (not a string or int), only Phar::PHP, Phar::PHPS and a mime type string are allowed' in %sfrontcontroller13.php:2
+Stack trace:
+#0 %sfrontcontroller13.php(2): Phar::webPhar('whatever', 'index.php', '', Array)
+#1 {main}
+ thrown in %sfrontcontroller13.php on line 2
\ No newline at end of file
--- /dev/null
+--TEST--
+Phar front controller mime type override, other
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--ENV--
+SCRIPT_NAME=/frontcontroller14.php/a.jpg
+REQUEST_URI=/frontcontroller14.php/a.jpg
+--FILE_EXTERNAL--
+frontcontroller8.phar
+--EXPECTHEADERS--
+Content-type: foo/bar
+Content-length: 4
+--EXPECT--
+hio2
--- /dev/null
+--TEST--
+Phar front controller mime type override, Phar::PHPS
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--ENV--
+SCRIPT_NAME=/frontcontroller15.php/a.php
+REQUEST_URI=/frontcontroller15.php/a.php
+--FILE_EXTERNAL--
+frontcontroller8.phar
+--EXPECTHEADERS--
+Content-type: text/html
+--EXPECT--
+<code><span style="color: #000000">
+<span style="color: #0000BB"><?php </span><span style="color: #007700">function </span><span style="color: #0000BB">hio</span><span style="color: #007700">(){}</span>
+</span>
+</code>
+
--- /dev/null
+--TEST--
+Phar front controller mime type override, Phar::PHP
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--ENV--
+SCRIPT_NAME=/frontcontroller16.php/a.phps
+REQUEST_URI=/frontcontroller16.php/a.phps
+--FILE_EXTERNAL--
+frontcontroller8.phar
+--EXPECTHEADERS--
+Content-type: text/html
+--EXPECT--
+hio1
+
--- /dev/null
+--TEST--
+Phar front controller mime type unknown
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--ENV--
+SCRIPT_NAME=/frontcontroller17.php/fronk.gronk
+REQUEST_URI=/frontcontroller17.php/fronk.gronk
+--FILE_EXTERNAL--
+frontcontroller8.phar
+--EXPECTHEADERS--
+Content-type: application/octet-stream
+Content-length: 4
+--EXPECT--
+hio3
+
--- /dev/null
+<?php
+@unlink(dirname(__FILE__) . '/frontcontroller6.phar');
+$a = new Phar(dirname(__FILE__) . '/frontcontroller6.phar');
+$a['a.php'] = 'hio';
+$a['a.jpg'] = 'hio';
+$a['a.phps'] = '<?php function hio(){}';
+$a->setStub('<?php
+Phar::webPhar("whatever", "index.php", null, array("blah" => 100));
+echo "oops did not run\n";
+var_dump($_ENV, $_SERVER);
+__HALT_COMPILER();');
+?>
--- /dev/null
+<?php
+@unlink(dirname(__FILE__) . '/frontcontroller7.phar');
+$a = new Phar(dirname(__FILE__) . '/frontcontroller7.phar');
+$a['a.php'] = 'hio';
+$a['a.jpg'] = 'hio';
+$a['a.phps'] = '<?php function hio(){}';
+$a->setStub('<?php
+Phar::webPhar("whatever", "index.php", null, array("blah" => null));
+echo "oops did not run\n";
+var_dump($_ENV, $_SERVER);
+__HALT_COMPILER();');
+?>
--- /dev/null
+<?php
+@unlink(dirname(__FILE__) . '/frontcontroller8.phar');
+$a = new Phar(dirname(__FILE__) . '/frontcontroller8.phar');
+$a['a.phps'] = 'hio1';
+$a['a.jpg'] = 'hio2';
+$a['a.php'] = '<?php function hio(){}';
+$a['fronk.gronk'] = 'hio3';
+$a->setStub('<?php
+Phar::webPhar("whatever", "index.php", null, array("jpg" => "foo/bar", "phps" => Phar::PHP, "php" => Phar::PHPS));
+echo "oops did not run\n";
+var_dump($_ENV, $_SERVER);
+__HALT_COMPILER();');
+?>