summaryrefslogtreecommitdiff
path: root/ext/xmlwriter
diff options
context:
space:
mode:
authorSean Finney <seanius@debian.org>2009-06-24 22:49:04 +0200
committerSean Finney <seanius@debian.org>2009-06-24 22:49:04 +0200
commit84f4ca9b07fe5b73d840258f4aa7c1eb534c4253 (patch)
tree9829bd578af8a4a8b42b04277f9067e00dc5ad90 /ext/xmlwriter
parent6821b67124604da690c5e9276d5370d679c63ac8 (diff)
downloadphp-84f4ca9b07fe5b73d840258f4aa7c1eb534c4253.tar.gz
Imported Upstream version 5.3.0~RC4upstream/5.3.0_RC4upstream/5.3.0.RC4
Diffstat (limited to 'ext/xmlwriter')
-rw-r--r--ext/xmlwriter/php_xmlwriter.c36
-rw-r--r--ext/xmlwriter/tests/bug48204.phpt17
-rw-r--r--ext/xmlwriter/tests/xmlwriter_open_uri_error_001.phpt16
-rw-r--r--ext/xmlwriter/tests/xmlwriter_open_uri_error_002.phpt16
-rw-r--r--ext/xmlwriter/tests/xmlwriter_open_uri_error_003.phpt16
-rw-r--r--ext/xmlwriter/tests/xmlwriter_open_uri_error_004.phpt16
-rw-r--r--ext/xmlwriter/tests/xmlwriter_open_uri_error_005.phpt16
-rw-r--r--ext/xmlwriter/tests/xmlwriter_set_indent_string_basic_001.phpt24
-rw-r--r--ext/xmlwriter/tests/xmlwriter_set_indent_string_error_001.phpt24
-rw-r--r--ext/xmlwriter/tests/xmlwriter_write_attribute_ns_basic_001.phpt28
-rw-r--r--ext/xmlwriter/tests/xmlwriter_write_attribute_ns_error_001.phpt35
-rw-r--r--ext/xmlwriter/tests/xmlwriter_write_dtd_basic_001.phpt22
-rw-r--r--ext/xmlwriter/tests/xmlwriter_write_dtd_error_001.phpt15
13 files changed, 276 insertions, 5 deletions
diff --git a/ext/xmlwriter/php_xmlwriter.c b/ext/xmlwriter/php_xmlwriter.c
index f72de17b8..21516a15a 100644
--- a/ext/xmlwriter/php_xmlwriter.c
+++ b/ext/xmlwriter/php_xmlwriter.c
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xmlwriter.c,v 1.20.2.12.2.15.2.11 2008/12/31 11:15:47 sebastian Exp $ */
+/* $Id: php_xmlwriter.c,v 1.20.2.12.2.15.2.15 2009/05/26 08:10:49 pajoye Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -28,7 +28,7 @@
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_xmlwriter.h"
-
+#include "ext/standard/php_string.h"
#if LIBXML_VERSION >= 20605
static PHP_FUNCTION(xmlwriter_set_indent);
@@ -614,7 +614,10 @@ static char *_xmlwriter_get_valid_file_path(char *source, char *resolved_path, i
if (uri->scheme != NULL) {
/* absolute file uris - libxml only supports localhost or empty host */
- if (strncasecmp(source, "file:///",8) == 0) {
+ if (strncasecmp(source, "file:///", 8) == 0) {
+ if (source[sizeof("file:///") - 1] == '\0') {
+ return NULL;
+ }
isFileUri = 1;
#ifdef PHP_WIN32
source += 8;
@@ -622,6 +625,10 @@ static char *_xmlwriter_get_valid_file_path(char *source, char *resolved_path, i
source += 7;
#endif
} else if (strncasecmp(source, "file://localhost/",17) == 0) {
+ if (source[sizeof("file://localhost/") - 1] == '\0') {
+ return NULL;
+ }
+
isFileUri = 1;
#ifdef PHP_WIN32
source += 17;
@@ -631,14 +638,29 @@ static char *_xmlwriter_get_valid_file_path(char *source, char *resolved_path, i
}
}
- file_dest = source;
-
if ((uri->scheme == NULL || isFileUri)) {
+ char file_dirname[MAXPATHLEN];
+ size_t dir_len;
+
if (!VCWD_REALPATH(source, resolved_path) && !expand_filepath(source, resolved_path TSRMLS_CC)) {
xmlFreeURI(uri);
return NULL;
}
+
+ memcpy(file_dirname, source, strlen(source));
+ dir_len = php_dirname(file_dirname, strlen(source));
+
+ if (dir_len > 0) {
+ struct stat buf;
+ if (php_sys_stat(file_dirname, &buf) != 0) {
+ xmlFreeURI(uri);
+ return NULL;
+ }
+ }
+
file_dest = resolved_path;
+ } else {
+ file_dest = source;
}
xmlFreeURI(uri);
@@ -1755,9 +1777,13 @@ static PHP_FUNCTION(xmlwriter_open_uri)
valid_file = _xmlwriter_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC);
if (!valid_file) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to resolve file path");
RETURN_FALSE;
}
+ /* TODO: Fix either the PHP stream or libxml APIs: it can then detect when a given
+ path is valid and not report out of memory error. Once it is done, remove the
+ directory check in _xmlwriter_get_valid_file_path */
#ifndef ZEND_ENGINE_2
ioctx = php_xmlwriter_streams_IO_open_write_wrapper(valid_file TSRMLS_CC);
if (ioctx == NULL) {
diff --git a/ext/xmlwriter/tests/bug48204.phpt b/ext/xmlwriter/tests/bug48204.phpt
new file mode 100644
index 000000000..86ab6688d
--- /dev/null
+++ b/ext/xmlwriter/tests/bug48204.phpt
@@ -0,0 +1,17 @@
+--TEST--
+xmlwriter_open_uri with PHP_MAXPATHLEN + 1
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$path = str_repeat('a', PHP_MAXPATHLEN + 1);
+var_dump(xmlwriter_open_uri('file:///' . $path));
+?>
+--CREDIT--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Unable to resolve file path in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_001.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_001.phpt
new file mode 100644
index 000000000..8bdf7eaea
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_001.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri with empty string as parameter
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(xmlwriter_open_uri(''));
+?>
+--CREDIT--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Empty string as source in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_002.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_002.phpt
new file mode 100644
index 000000000..cfda44e21
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_002.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri without parameter
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(xmlwriter_open_uri());
+?>
+--CREDIT--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri() expects exactly %d parameter, %d given in %s on line %d
+NULL
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_003.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_003.phpt
new file mode 100644
index 000000000..49a293853
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_003.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri with non existing file
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(xmlwriter_open_uri('foo/bar.tmp'));
+?>
+--CREDIT--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Unable to resolve file path in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_004.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_004.phpt
new file mode 100644
index 000000000..d4e72ffda
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_004.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri with file:///
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(xmlwriter_open_uri('file:///'));
+?>
+--CREDIT--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Unable to resolve file path in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_open_uri_error_005.phpt b/ext/xmlwriter/tests/xmlwriter_open_uri_error_005.phpt
new file mode 100644
index 000000000..20a28afcd
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_open_uri_error_005.phpt
@@ -0,0 +1,16 @@
+--TEST--
+xmlwriter_open_uri with file://localhost/
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(xmlwriter_open_uri('file://localhost/'));
+?>
+--CREDIT--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECTF--
+
+Warning: xmlwriter_open_uri(): Unable to resolve file path in %s on line %d
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_set_indent_string_basic_001.phpt b/ext/xmlwriter/tests/xmlwriter_set_indent_string_basic_001.phpt
new file mode 100644
index 000000000..896778b02
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_set_indent_string_basic_001.phpt
@@ -0,0 +1,24 @@
+--TEST--
+xmlwriter_set_indent_string passing xmlwriter resource
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$temp_filename = dirname(__FILE__)."/xmlwriter_set_indent_string.tmp";
+ $fp = fopen($temp_filename, "w");
+ fwrite ($fp, "Hi");
+ fclose($fp);
+$resource = xmlwriter_open_uri($temp_filename);
+var_dump(xmlwriter_set_indent_string($resource, ' '));
+?>
+--CLEAN--
+<?php
+$temp_filename = dirname(__FILE__)."/xmlwriter_set_indent_string.tmp";
+unlink($temp_filename);
+?>
+--CREDIT--
+Koen Kuipers koenk82@gmail.com
+Theo van der Zee
+#Test Fest Utrecht 09-05-2009
+--EXPECT--
+bool(true)
diff --git a/ext/xmlwriter/tests/xmlwriter_set_indent_string_error_001.phpt b/ext/xmlwriter/tests/xmlwriter_set_indent_string_error_001.phpt
new file mode 100644
index 000000000..c39678dac
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_set_indent_string_error_001.phpt
@@ -0,0 +1,24 @@
+--TEST--
+xmlwriter_set_indent_string with missing param(s)
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$temp_filename = dirname(__FILE__)."/xmlwriter_set_indent_string_error.tmp";
+ $fp = fopen($temp_filename, "w");
+ fwrite ($fp, "Hi");
+ fclose($fp);
+$resource = xmlwriter_open_uri($temp_filename);
+var_dump(xmlwriter_set_indent_string($resource));
+?>
+--CLEAN--
+<?php
+$temp_filename = dirname(__FILE__)."/xmlwriter_set_indent_string_error.tmp";
+unlink($temp_filename);
+?>
+--CREDIT--
+Koen Kuipers koenk82@gmail.com
+--EXPECTF--
+
+Warning: xmlwriter_set_indent_string() expects exactly %d parameters, %d given in %s on line %d
+NULL
diff --git a/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_basic_001.phpt b/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_basic_001.phpt
new file mode 100644
index 000000000..090327b66
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_basic_001.phpt
@@ -0,0 +1,28 @@
+--TEST--
+xmlwriter_write_attribute_ns basic function tests
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$xw = xmlwriter_open_memory();
+xmlwriter_set_indent($xw, TRUE);
+xmlwriter_start_document($xw, NULL, "UTF-8");
+xmlwriter_start_element($xw, 'root');
+xmlwriter_write_attribute_ns($xw, 'prefix', 'id', 'http://www.php.net/uri', 'elem1');
+xmlwriter_start_element($xw, 'elem1');
+xmlwriter_write_attribute($xw, 'attr1', 'first');
+xmlwriter_end_element($xw);
+xmlwriter_full_end_element($xw);
+xmlwriter_end_document($xw);
+
+$output = xmlwriter_flush($xw, true);
+print $output;
+?>
+--CREDIT--
+Koen Kuipers koenk82@gmail.com
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<root prefix:id="elem1" xmlns:prefix="http://www.php.net/uri">
+ <elem1 attr1="first"/>
+</root>
+
diff --git a/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_error_001.phpt b/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_error_001.phpt
new file mode 100644
index 000000000..251672313
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_write_attribute_ns_error_001.phpt
@@ -0,0 +1,35 @@
+--TEST--
+xmlwriter_write_attribute_ns with missing param
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$xw = xmlwriter_open_memory();
+xmlwriter_set_indent($xw, TRUE);
+xmlwriter_start_document($xw, NULL, "UTF-8");
+xmlwriter_start_element($xw, 'root');
+xmlwriter_write_attribute_ns($xw, 'prefix', '', 'http://www.php.net/uri');
+xmlwriter_start_element($xw, 'elem1');
+xmlwriter_write_attribute($xw, 'attr1', 'first');
+xmlwriter_end_element($xw);
+xmlwriter_full_end_element($xw);
+xmlwriter_end_document($xw);
+
+$output = xmlwriter_flush($xw, true);
+print $output;
+
+// write attribute_ns without start_element first
+$xw = xmlwriter_open_memory();
+var_dump(xmlwriter_write_attribute_ns($xw, 'prefix', 'id', 'http://www.php.net/uri', 'elem1'));
+print xmlwriter_output_memory($xw);
+?>
+--CREDIT--
+Koen Kuipers koenk82@gmail.com
+--EXPECTF--
+
+Warning: xmlwriter_write_attribute_ns() expects exactly %d parameters, %d given in %s on line %d
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+ <elem1 attr1="first"/>
+</root>
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_write_dtd_basic_001.phpt b/ext/xmlwriter/tests/xmlwriter_write_dtd_basic_001.phpt
new file mode 100644
index 000000000..62adce818
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_write_dtd_basic_001.phpt
@@ -0,0 +1,22 @@
+--TEST--
+xmlwriter_write_dtd basic function tests
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+
+$xmlwriter = xmlwriter_open_memory();
+var_dump(xmlwriter_write_dtd($xmlwriter, 'bla1', 'bla2', 'bla3', 'bla4'));
+$output = xmlwriter_flush($xmlwriter, true);
+print $output . PHP_EOL;
+
+var_dump(xmlwriter_write_dtd($xmlwriter, '', '', ''));
+$output = xmlwriter_flush($xmlwriter, true);
+print $output;
+?>
+--CREDIT--
+Koen Kuipers koenk82@gmail.com
+--EXPECT--
+bool(true)
+<!DOCTYPE bla1 PUBLIC "bla2" "bla3" [bla4]>
+bool(false)
diff --git a/ext/xmlwriter/tests/xmlwriter_write_dtd_error_001.phpt b/ext/xmlwriter/tests/xmlwriter_write_dtd_error_001.phpt
new file mode 100644
index 000000000..7968eb456
--- /dev/null
+++ b/ext/xmlwriter/tests/xmlwriter_write_dtd_error_001.phpt
@@ -0,0 +1,15 @@
+--TEST--
+xmlwriter_write_dtd with missing param(s)
+--SKIPIF--
+<?php if (!extension_loaded("xmlwriter")) print "skip"; ?>
+--FILE--
+<?php
+$xmlwriter = xmlwriter_open_memory();
+var_dump(xmlwriter_write_dtd($xmlwriter));
+?>
+--CREDIT--
+Koen Kuipers koenk82@gmail.com
+--EXPECTF--
+
+Warning: xmlwriter_write_dtd() expects at least %d parameters, %d given in %s on line %d
+NULL