Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 790286a

Browse files
committed
ext/pdo: Pass argument number to pdo_dbh_attribute_set()
1 parent b6febd1 commit 790286a

File tree

4 files changed

+23
-23
lines changed

4 files changed

+23
-23
lines changed

‎ext/pdo/pdo_dbh.c‎

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
#include "zend_observer.h"
3636
#include "zend_extensions.h"
3737

38-
static bool pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value);
38+
static bool pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value, uint32_tvalue_arg_num);
3939

4040
void pdo_throw_exception(unsigned int driver_errcode, char *driver_errmsg, pdo_error_type *pdo_error)
4141
{
@@ -512,7 +512,7 @@ PDO_API void php_pdo_internal_construct_driver(INTERNAL_FUNCTION_PARAMETERS, zen
512512
ZVAL_DEREF(attr_value);
513513

514514
/* TODO: Should the constructor fail when the attribute cannot be set? */
515-
pdo_dbh_attribute_set(dbh, long_key, attr_value);
515+
pdo_dbh_attribute_set(dbh, long_key, attr_value, 3);
516516
} ZEND_HASH_FOREACH_END();
517517
}
518518

@@ -814,7 +814,7 @@ PDO_API bool pdo_get_bool_param(bool *bval, const zval *value)
814814
}
815815

816816
/* Return false on failure, true otherwise */
817-
static bool pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value) /* {{{ */
817+
static bool pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value, uint32_tvalue_arg_num) /* {{{ */
818818
{
819819
zend_long lval;
820820
bool bval;
@@ -831,7 +831,7 @@ static bool pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value) /
831831
dbh->error_mode = lval;
832832
return true;
833833
default:
834-
zend_value_error("Error mode must be one of the PDO::ERRMODE_* constants");
834+
zend_argument_value_error(value_arg_num, "Error mode must be one of the PDO::ERRMODE_* constants");
835835
return false;
836836
}
837837
return false;
@@ -847,7 +847,7 @@ static bool pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value) /
847847
dbh->desired_case = lval;
848848
return true;
849849
default:
850-
zend_value_error("Case folding mode must be one of the PDO::CASE_* constants");
850+
zend_argument_value_error(value_arg_num, "Case folding mode must be one of the PDO::CASE_* constants");
851851
return false;
852852
}
853853
return false;
@@ -865,7 +865,7 @@ static bool pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value) /
865865
zval *tmp;
866866
if ((tmp = zend_hash_index_find(Z_ARRVAL_P(value), 0)) != NULL && Z_TYPE_P(tmp) == IS_LONG) {
867867
if (Z_LVAL_P(tmp) == PDO_FETCH_INTO || Z_LVAL_P(tmp) == PDO_FETCH_CLASS) {
868-
zend_value_error("PDO::FETCH_INTO and PDO::FETCH_CLASS cannot be set as the default fetch mode");
868+
zend_argument_value_error(value_arg_num, "PDO::FETCH_INTO and PDO::FETCH_CLASS cannot be set as the default fetch mode");
869869
return false;
870870
}
871871
}
@@ -876,7 +876,7 @@ static bool pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value) /
876876
}
877877
}
878878
if (lval == PDO_FETCH_USE_DEFAULT) {
879-
zend_value_error("Fetch mode must be a bitmask of PDO::FETCH_* constants");
879+
zend_argument_value_error(value_arg_num, "Fetch mode must be a bitmask of PDO::FETCH_* constants");
880880
return false;
881881
}
882882
dbh->default_fetch_type = lval;
@@ -906,25 +906,25 @@ static bool pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value) /
906906
return false;
907907
}
908908
if (Z_TYPE_P(value) != IS_ARRAY) {
909-
zend_type_error("PDO::ATTR_STATEMENT_CLASS value must be of type array, %s given",
909+
zend_argument_type_error(value_arg_num, "PDO::ATTR_STATEMENT_CLASS value must be of type array, %s given",
910910
zend_zval_value_name(value));
911911
return false;
912912
}
913913
if ((item = zend_hash_index_find(Z_ARRVAL_P(value), 0)) == NULL) {
914-
zend_value_error("PDO::ATTR_STATEMENT_CLASS value must be an array with the format "
914+
zend_argument_value_error(value_arg_num, "PDO::ATTR_STATEMENT_CLASS value must be an array with the format "
915915
"array(classname, constructor_args)");
916916
return false;
917917
}
918918
if (Z_TYPE_P(item) != IS_STRING || (pce = zend_lookup_class(Z_STR_P(item))) == NULL) {
919-
zend_type_error("PDO::ATTR_STATEMENT_CLASS class must be a valid diff-9a6d6a4359a98668fef29400492f877938424d1b1d2e84933c91ab34161cf360-919-919-0" data-selected="false" role="gridcell" tabindex="-1">
919+
zend_argument_type_error(value_arg_num, "PDO::ATTR_STATEMENT_CLASS class must be a valid class");
920920
return false;
921921
}
922922
if (!instanceof_function(pce, pdo_dbstmt_ce)) {
923-
zend_type_error("PDO::ATTR_STATEMENT_CLASS class must be derived from PDOStatement");
923+
zend_argument_type_error(value_arg_num, "PDO::ATTR_STATEMENT_CLASS class must be derived from PDOStatement");
924924
return false;
925925
}
926926
if (pce->constructor && !(pce->constructor->common.fn_flags & (ZEND_ACC_PRIVATE|ZEND_ACC_PROTECTED))) {
927-
zend_type_error("User-supplied statement class cannot have a public constructor");
927+
zend_argument_type_error(value_arg_num, "User-supplied statement class cannot have a public constructor");
928928
return false;
929929
}
930930
dbh->def_stmt_ce = pce;
@@ -934,7 +934,7 @@ static bool pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value) /
934934
}
935935
if ((item = zend_hash_index_find(Z_ARRVAL_P(value), 1)) != NULL) {
936936
if (Z_TYPE_P(item) != IS_ARRAY) {
937-
zend_type_error("PDO::ATTR_STATEMENT_CLASS constructor_args must be of type ?array, %s given",
937+
zend_argument_type_error(value_arg_num, "PDO::ATTR_STATEMENT_CLASS constructor_args must be of type ?array, %s given",
938938
zend_zval_value_name(value));
939939
return false;
940940
}
@@ -980,7 +980,7 @@ PHP_METHOD(PDO, setAttribute)
980980
PDO_DBH_CLEAR_ERR();
981981
PDO_CONSTRUCT_CHECK;
982982

983-
RETURN_BOOL(pdo_dbh_attribute_set(dbh, attr, value));
983+
RETURN_BOOL(pdo_dbh_attribute_set(dbh, attr, value, 2));
984984
}
985985
/* }}} */
986986

‎ext/pdo/tests/bug_44159.phpt‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ foreach ($attrs as $attr) {
4040

4141
?>
4242
--EXPECT--
43-
TypeError: PDO::ATTR_STATEMENT_CLASS value must be of type array, null given
44-
TypeError: PDO::ATTR_STATEMENT_CLASS value must be of type array, int given
45-
TypeError: PDO::ATTR_STATEMENT_CLASS value must be of type array, string given
43+
TypeError: PDO::setAttribute(): Argument #2 ($value) PDO::ATTR_STATEMENT_CLASS value must be of type array, null given
44+
TypeError: PDO::setAttribute(): Argument #2 ($value) PDO::ATTR_STATEMENT_CLASS value must be of type array, int given
45+
TypeError: PDO::setAttribute(): Argument #2 ($value) PDO::ATTR_STATEMENT_CLASS value must be of type array, string given
4646
TypeError: Attribute value must be of type bool for selected attribute, null given
4747
bool(true)
4848
TypeError: Attribute value must be of type bool for selected attribute, string given

‎ext/pdo_mysql/tests/pdo_mysql_attr_errmode.phpt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ error_reporting=E_ALL
158158
TypeError: Attribute value must be of type int for selected attribute, array given
159159
TypeError: Attribute value must be of type int for selected attribute, stdClass given
160160
TypeError: Attribute value must be of type int for selected attribute, string given
161-
ValueError: Error mode must be one of the PDO::ERRMODE_* constants
161+
ValueError: PDO::setAttribute(): Argument #2 ($value) Error mode must be one of the PDO::ERRMODE_* constants
162162

163163
Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: %d You have an error in your SQL syntax; check the manual that corresponds to your %s server version for the right syntax to use near '%s' at line %d in %s on line %d
164164

‎ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,11 @@ array(1) {
136136
[0]=>
137137
string(12) "PDOStatement"
138138
}
139-
PDO::ATTR_STATEMENT_CLASS value must be of type array, string given
140-
PDO::ATTR_STATEMENT_CLASS class must be a valid class
141-
PDO::ATTR_STATEMENT_CLASS class must be a valid class
142-
PDO::ATTR_STATEMENT_CLASS class must be derived from PDOStatement
143-
TypeError: User-supplied statement class cannot have a public constructor
139+
PDO::setAttribute(): Argument #2 ($value) PDO::ATTR_STATEMENT_CLASS value must be of type array, string given
140+
PDO::setAttribute(): Argument #2 ($value) PDO::ATTR_STATEMENT_CLASS class must be a valid class
141+
PDO::setAttribute(): Argument #2 ($value) PDO::ATTR_STATEMENT_CLASS class must be a valid class
142+
PDO::setAttribute(): Argument #2 ($value) PDO::ATTR_STATEMENT_CLASS class must be derived from PDOStatement
143+
TypeError: PDO::setAttribute(): Argument #2 ($value) User-supplied statement class cannot have a public constructor
144144
array(2) {
145145
[0]=>
146146
string(12) "mystatement4"

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /