scottmac Tue Feb 10 00:44:09 2009 UTC
Modified files:
/php-src/ext/sqlite3 sqlite3.c
/php-src/ext/sqlite3/tests sqlite3_15_open_error.phpt
sqlite3_21_security.phpt
Log:
MFB: The constructor should also throw exceptions, make this semi useful now.
http://cvs.php.net/viewvc.cgi/php-src/ext/sqlite3/sqlite3.c?r1=1.34&r2=1.35&diff_format=u
Index: php-src/ext/sqlite3/sqlite3.c
diff -u php-src/ext/sqlite3/sqlite3.c:1.34 php-src/ext/sqlite3/sqlite3.c:1.35
--- php-src/ext/sqlite3/sqlite3.c:1.34 Wed Feb 4 09:58:39 2009
+++ php-src/ext/sqlite3/sqlite3.c Tue Feb 10 00:44:09 2009
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sqlite3.c,v 1.34 2009/02/04 09:58:39 pajoye Exp $ */
+/* $Id: sqlite3.c,v 1.35 2009/02/10 00:44:09 scottmac Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -74,36 +74,46 @@
zend_uchar filename_type;
int filename_len, encryption_key_len = 0;
long flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
+ zend_error_handling error_handling;
+
db_obj = (php_sqlite3_db_object *)zend_object_store_get_object(object
TSRMLS_CC);
+ zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC);
if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|lS",
&filename, &filename_len, &filename_type, &flags, &encryption_key,
&encryption_key_len)) {
+ zend_restore_error_handling(&error_handling TSRMLS_CC);
return;
}
+ zend_restore_error_handling(&error_handling TSRMLS_CC);
+
if (db_obj->initialised) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Already initialised
DB Object");
+ zend_throw_exception(zend_exception_get_default(TSRMLS_C),
"Already initialised DB Object", 0 TSRMLS_CC);
+ return;
}
if (filename_type == IS_UNICODE) {
if (php_stream_path_encode(NULL, &filename, &filename_len,
(UChar *)filename, filename_len, REPORT_ERRORS, FG(default_context)) ==
FAILURE) {
- RETURN_FALSE;
+
zend_throw_exception(zend_exception_get_default(TSRMLS_C), "Unable to decode
filepath", 0 TSRMLS_CC);
+ return;
}
}
if (strncmp(filename, ":memory:", 8) != 0) {
if (!(fullpath = expand_filepath(filename, NULL TSRMLS_CC))) {
+
zend_throw_exception(zend_exception_get_default(TSRMLS_C), "Unable to expand
filepath", 0 TSRMLS_CC);
if (filename_type == IS_UNICODE) {
efree(filename);
}
- RETURN_FALSE;
+ return;
}
if (php_check_open_basedir(fullpath TSRMLS_CC)) {
+
zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC,
"open_basedir prohibits opening %s", fullpath);
if (filename_type == IS_UNICODE) {
efree(filename);
}
efree(fullpath);
- RETURN_FALSE;
+ return;
}
} else {
fullpath = estrdup(filename);
@@ -119,7 +129,7 @@
/* Todo: utf-16 = sqlite3_open16 */
if (sqlite3_open(fullpath, &(db_obj->db)) != SQLITE_OK) {
#endif
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unable to open
database: %s", sqlite3_errmsg(db_obj->db));
+ zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0
TSRMLS_CC, "Unable to open database: %s", sqlite3_errmsg(db_obj->db));
if (fullpath) {
efree(fullpath);
}
@@ -131,6 +141,7 @@
#if SQLITE_HAS_CODEC
if (encryption_key_len > 0) {
if (sqlite3_key(db_obj->db, encryption_key, encryption_key_len)
!= SQLITE_OK) {
+
zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC,
"Unable to open database: %s", sqlite3_errmsg(db_obj->db));
return;
}
}
@@ -143,7 +154,6 @@
if (fullpath) {
efree(fullpath);
}
- RETURN_TRUE;
}
/* }}} */
http://cvs.php.net/viewvc.cgi/php-src/ext/sqlite3/tests/sqlite3_15_open_error.phpt?r1=1.2&r2=1.3&diff_format=u
Index: php-src/ext/sqlite3/tests/sqlite3_15_open_error.phpt
diff -u php-src/ext/sqlite3/tests/sqlite3_15_open_error.phpt:1.2
php-src/ext/sqlite3/tests/sqlite3_15_open_error.phpt:1.3
--- php-src/ext/sqlite3/tests/sqlite3_15_open_error.phpt:1.2 Fri Jul 25
21:34:15 2008
+++ php-src/ext/sqlite3/tests/sqlite3_15_open_error.phpt Tue Feb 10
00:44:09 2009
@@ -7,14 +7,14 @@
$unreadable = dirname(__FILE__) . '/unreadable.db';
touch($unreadable);
chmod($unreadable, 0200);
-$db = new SQLite3($unreadable);
-
-var_dump($db);
+try {
+ $db = new SQLite3($unreadable);
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
echo "Done\n";
unlink($unreadable);
?>
--EXPECTF--
-Notice: SQLite3::__construct(): Unable to open database: unable to open
database file in %s/sqlite3_15_open_error.php on line %d
-object(SQLite3)#%d (0) {
-}
+Unable to open database: unable to open database file
Done
http://cvs.php.net/viewvc.cgi/php-src/ext/sqlite3/tests/sqlite3_21_security.phpt?r1=1.2&r2=1.3&diff_format=u
Index: php-src/ext/sqlite3/tests/sqlite3_21_security.phpt
diff -u php-src/ext/sqlite3/tests/sqlite3_21_security.phpt:1.2
php-src/ext/sqlite3/tests/sqlite3_21_security.phpt:1.3
--- php-src/ext/sqlite3/tests/sqlite3_21_security.phpt:1.2 Fri Jul 25
21:34:15 2008
+++ php-src/ext/sqlite3/tests/sqlite3_21_security.phpt Tue Feb 10 00:44:09 2009
@@ -16,8 +16,11 @@
unlink($directory . $file);
echo "Above test directory\n";
-$db = new SQLite3('../bad' . $file);
-var_dump($db);
+try {
+ $db = new SQLite3('../bad' . $file);
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
echo "Done\n";
?>
@@ -28,7 +31,6 @@
bool(true)
Above test directory
-Warning: SQLite3::__construct(): open_basedir restriction in effect. File(%s)
is not within the allowed path(s): (.) in %s on line %d
-object(SQLite3)#%d (0) {
-}
+Warning: SQLite3::__construct(): open_basedir restriction in effect. File(%s)
is not within the allowed path(s): (.) in %s/sqlite3_21_security.php on line %d
+open_basedir prohibits opening %s
Done
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php