diff --git a/ext/dba/dba.c b/ext/dba/dba.c index c0688714fe7c..9801c379fcff 100644 --- a/ext/dba/dba.c +++ b/ext/dba/dba.c @@ -563,7 +563,10 @@ static void php_dba_open(INTERNAL_FUNCTION_PARAMETERS, bool persistent) zend_argument_must_not_be_empty_error(3); RETURN_THROWS(); } - // TODO Check Value for permission + if (permission < 0 || (permission & ~07777) != 0) { + zend_argument_value_error(4, "Invalid file permission value (must be between 0 and 07777)"); + RETURN_THROWS(); + } if (map_size < 0) { zend_argument_value_error(5, "must be greater than or equal to 0"); RETURN_THROWS(); diff --git a/ext/dba/tests/dba_permission.phpt b/ext/dba/tests/dba_permission.phpt new file mode 100644 index 000000000000..3b53fd1e40d2 --- /dev/null +++ b/ext/dba/tests/dba_permission.phpt @@ -0,0 +1,51 @@ +--TEST-- +DBA permission validation (invalid bits check) +--EXTENSIONS-- +dba +--SKIPIF-- + +--FILE-- + +--EXPECT-- +OK +OK +OK +OK +VALUE_ERROR +VALUE_ERROR +VALUE_ERROR +--CLEAN-- +