]> granicus.if.org Git - php/commitdiff
- Fixed bug #31754 (dbase_open() fails for mode = 1). (Mehdi, Derick)
authorDerick Rethans <derick@php.net>
Fri, 4 Feb 2005 14:28:50 +0000 (14:28 +0000)
committerDerick Rethans <derick@php.net>
Fri, 4 Feb 2005 14:28:50 +0000 (14:28 +0000)
ext/dbase/dbase.c
ext/dbase/tests/bug31754.phpt [new file with mode: 0644]

index 5bb109de84e0d8e38a06af31192ebf77f385a2f5..15d9f4f00ea2a51613a4a7ebe2cd1b36f69b605c 100644 (file)
@@ -129,6 +129,11 @@ PHP_FUNCTION(dbase_open)
        convert_to_string_ex(dbf_name);
        convert_to_long_ex(options);
 
+       if (Z_LVAL_PP(options) == 1) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot open %s in write-only mode", Z_STRVAL_PP(dbf_name));
+               RETURN_FALSE;
+       }
+
        if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(dbf_name), NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
                RETURN_FALSE;
        }
diff --git a/ext/dbase/tests/bug31754.phpt b/ext/dbase/tests/bug31754.phpt
new file mode 100644 (file)
index 0000000..32f802b
--- /dev/null
@@ -0,0 +1,26 @@
+--TEST--
+Bug #31754: (dbase_open() fails for mode = 1)
+--SKIPIF--
+<?php
+if (!extension_loaded('dbase')) {
+       die('skip dbase extension not available');
+}
+?>
+--FILE--
+<?php
+
+// database "definition"
+$def = array(
+       array("foo", "L")
+);
+
+// creation
+$dbh = dbase_create('/tmp/bug31754.dbf', array(array('foo', 'L')));
+dbase_close($dbh);
+
+$dbh = dbase_open('/tmp/bug31754.dbf', 1);
+unlink('/tmp/bug31754.dbf');
+
+?>
+--EXPECTF--
+Warning: dbase_open(): Cannot open /tmp/bug31754.dbf in write-only mode in %sbug31754.php on line %d