Skip to content

Commit 5300f38

Browse files
committed
ext/ldap: Remove unnecessary scoping
1 parent 647c24f commit 5300f38

File tree

1 file changed

+92
-95
lines changed

1 file changed

+92
-95
lines changed

ext/ldap/ldap.c

Lines changed: 92 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -2533,112 +2533,110 @@ PHP_FUNCTION(ldap_modify_batch)
25332533
VERIFY_LDAP_LINK_CONNECTED(ld);
25342534

25352535
/* perform validation */
2536-
{
2537-
/* make sure the DN contains no NUL bytes */
2538-
if (zend_char_has_nul_byte(dn, dn_len)) {
2539-
zend_argument_value_error(2, "must not contain null bytes");
2536+
/* make sure the DN contains no NUL bytes */
2537+
if (zend_char_has_nul_byte(dn, dn_len)) {
2538+
zend_argument_value_error(2, "must not contain null bytes");
2539+
RETURN_THROWS();
2540+
}
2541+
2542+
/* make sure the top level is a normal array */
2543+
if (zend_hash_num_elements(modifications) == 0) {
2544+
zend_argument_must_not_be_empty_error(3);
2545+
RETURN_THROWS();
2546+
}
2547+
if (!zend_array_is_list(modifications)) {
2548+
zend_argument_value_error(3, "must be a list");
2549+
RETURN_THROWS();
2550+
}
2551+
2552+
zval *modification_zv = NULL;
2553+
ZEND_HASH_FOREACH_VAL(modifications, modification_zv) {
2554+
if (Z_TYPE_P(modification_zv) != IS_ARRAY) {
2555+
zend_argument_type_error(3, "must only contain arrays");
25402556
RETURN_THROWS();
25412557
}
25422558

2543-
/* make sure the top level is a normal array */
2544-
if (zend_hash_num_elements(modifications) == 0) {
2545-
zend_argument_must_not_be_empty_error(3);
2559+
SEPARATE_ARRAY(modification_zv);
2560+
const HashTable *modification = Z_ARRVAL_P(modification_zv);
2561+
uint32_t modification_size = zend_hash_num_elements(modification);
2562+
2563+
if (modification_size != 2 && modification_size != 3) {
2564+
zend_argument_value_error(3, "a modification entry must only contain the keys "
2565+
"\"" LDAP_MODIFY_BATCH_ATTRIB "\", \"" LDAP_MODIFY_BATCH_MODTYPE "\", and \"" LDAP_MODIFY_BATCH_VALUES "\"");
25462566
RETURN_THROWS();
25472567
}
2548-
if (!zend_array_is_list(modifications)) {
2549-
zend_argument_value_error(3, "must be a list");
2568+
2569+
const zval *attrib = zend_hash_str_find(modification, LDAP_MODIFY_BATCH_ATTRIB, strlen(LDAP_MODIFY_BATCH_ATTRIB));
2570+
if (UNEXPECTED(attrib == NULL)) {
2571+
zend_argument_value_error(3, "a modification entry must contain the \"" LDAP_MODIFY_BATCH_ATTRIB "\" option");
2572+
RETURN_THROWS();
2573+
}
2574+
if (UNEXPECTED(Z_TYPE_P(attrib) != IS_STRING)) {
2575+
zend_argument_type_error(3, "the value for option \"" LDAP_MODIFY_BATCH_ATTRIB "\" must be of type string, %s given", zend_zval_value_name(attrib));
2576+
RETURN_THROWS();
2577+
}
2578+
if (zend_str_has_nul_byte(Z_STR_P(attrib))) {
2579+
zend_argument_value_error(3, "the value for option \"" LDAP_MODIFY_BATCH_ATTRIB "\" must not contain null bytes");
25502580
RETURN_THROWS();
25512581
}
25522582

2553-
zval *modification_zv = NULL;
2554-
ZEND_HASH_FOREACH_VAL(modifications, modification_zv) {
2555-
if (Z_TYPE_P(modification_zv) != IS_ARRAY) {
2556-
zend_argument_type_error(3, "must only contain arrays");
2557-
RETURN_THROWS();
2558-
}
2559-
2560-
SEPARATE_ARRAY(modification_zv);
2561-
const HashTable *modification = Z_ARRVAL_P(modification_zv);
2562-
uint32_t modification_size = zend_hash_num_elements(modification);
2563-
2564-
if (modification_size != 2 && modification_size != 3) {
2565-
zend_argument_value_error(3, "a modification entry must only contain the keys "
2566-
"\"" LDAP_MODIFY_BATCH_ATTRIB "\", \"" LDAP_MODIFY_BATCH_MODTYPE "\", and \"" LDAP_MODIFY_BATCH_VALUES "\"");
2567-
RETURN_THROWS();
2568-
}
2569-
2570-
const zval *attrib = zend_hash_str_find(modification, LDAP_MODIFY_BATCH_ATTRIB, strlen(LDAP_MODIFY_BATCH_ATTRIB));
2571-
if (UNEXPECTED(attrib == NULL)) {
2572-
zend_argument_value_error(3, "a modification entry must contain the \"" LDAP_MODIFY_BATCH_ATTRIB "\" option");
2573-
RETURN_THROWS();
2574-
}
2575-
if (UNEXPECTED(Z_TYPE_P(attrib) != IS_STRING)) {
2576-
zend_argument_type_error(3, "the value for option \"" LDAP_MODIFY_BATCH_ATTRIB "\" must be of type string, %s given", zend_zval_value_name(attrib));
2577-
RETURN_THROWS();
2578-
}
2579-
if (zend_str_has_nul_byte(Z_STR_P(attrib))) {
2580-
zend_argument_value_error(3, "the value for option \"" LDAP_MODIFY_BATCH_ATTRIB "\" must not contain null bytes");
2581-
RETURN_THROWS();
2582-
}
2583-
2584-
const zval *modtype_zv = zend_hash_str_find(modification, LDAP_MODIFY_BATCH_MODTYPE, strlen(LDAP_MODIFY_BATCH_MODTYPE));
2585-
if (UNEXPECTED(modtype_zv == NULL)) {
2586-
zend_argument_value_error(3, "a modification entry must contain the \"" LDAP_MODIFY_BATCH_MODTYPE "\" option");
2587-
RETURN_THROWS();
2588-
}
2589-
if (UNEXPECTED(Z_TYPE_P(modtype_zv) != IS_LONG)) {
2590-
zend_argument_type_error(3, "the value for option \"" LDAP_MODIFY_BATCH_MODTYPE "\" must be of type int, %s given", zend_zval_value_name(attrib));
2591-
RETURN_THROWS();
2592-
}
2593-
zend_long modtype = Z_LVAL_P(modtype_zv);
2594-
if (
2595-
modtype != LDAP_MODIFY_BATCH_ADD &&
2596-
modtype != LDAP_MODIFY_BATCH_REMOVE &&
2597-
modtype != LDAP_MODIFY_BATCH_REPLACE &&
2598-
modtype != LDAP_MODIFY_BATCH_REMOVE_ALL
2599-
) {
2600-
zend_argument_value_error(3, "the value for option \"" LDAP_MODIFY_BATCH_MODTYPE "\" must be"
2601-
" LDAP_MODIFY_BATCH_ADD, LDAP_MODIFY_BATCH_REMOVE, LDAP_MODIFY_BATCH_REPLACE,"
2602-
" or LDAP_MODIFY_BATCH_REMOVE_ALL");
2603-
RETURN_THROWS();
2604-
}
2605-
/* We assume that the modification array is well-formed and only ever contains an extra "values" key */
2606-
if (modtype == LDAP_MODIFY_BATCH_REMOVE_ALL && modification_size == 3) {
2607-
zend_argument_value_error(3, "a modification entry must not contain the "
2608-
"\"" LDAP_MODIFY_BATCH_VALUES "\" option when option \"" LDAP_MODIFY_BATCH_MODTYPE "\" "
2609-
"is LDAP_MODIFY_BATCH_REMOVE_ALL");
2610-
RETURN_THROWS();
2611-
}
2583+
const zval *modtype_zv = zend_hash_str_find(modification, LDAP_MODIFY_BATCH_MODTYPE, strlen(LDAP_MODIFY_BATCH_MODTYPE));
2584+
if (UNEXPECTED(modtype_zv == NULL)) {
2585+
zend_argument_value_error(3, "a modification entry must contain the \"" LDAP_MODIFY_BATCH_MODTYPE "\" option");
2586+
RETURN_THROWS();
2587+
}
2588+
if (UNEXPECTED(Z_TYPE_P(modtype_zv) != IS_LONG)) {
2589+
zend_argument_type_error(3, "the value for option \"" LDAP_MODIFY_BATCH_MODTYPE "\" must be of type int, %s given", zend_zval_value_name(attrib));
2590+
RETURN_THROWS();
2591+
}
2592+
zend_long modtype = Z_LVAL_P(modtype_zv);
2593+
if (
2594+
modtype != LDAP_MODIFY_BATCH_ADD &&
2595+
modtype != LDAP_MODIFY_BATCH_REMOVE &&
2596+
modtype != LDAP_MODIFY_BATCH_REPLACE &&
2597+
modtype != LDAP_MODIFY_BATCH_REMOVE_ALL
2598+
) {
2599+
zend_argument_value_error(3, "the value for option \"" LDAP_MODIFY_BATCH_MODTYPE "\" must be"
2600+
" LDAP_MODIFY_BATCH_ADD, LDAP_MODIFY_BATCH_REMOVE, LDAP_MODIFY_BATCH_REPLACE,"
2601+
" or LDAP_MODIFY_BATCH_REMOVE_ALL");
2602+
RETURN_THROWS();
2603+
}
2604+
/* We assume that the modification array is well-formed and only ever contains an extra "values" key */
2605+
if (modtype == LDAP_MODIFY_BATCH_REMOVE_ALL && modification_size == 3) {
2606+
zend_argument_value_error(3, "a modification entry must not contain the "
2607+
"\"" LDAP_MODIFY_BATCH_VALUES "\" option when option \"" LDAP_MODIFY_BATCH_MODTYPE "\" "
2608+
"is LDAP_MODIFY_BATCH_REMOVE_ALL");
2609+
RETURN_THROWS();
2610+
}
26122611

2613-
zval *modification_values_zv = zend_hash_str_find(modification, LDAP_MODIFY_BATCH_VALUES, strlen(LDAP_MODIFY_BATCH_VALUES));
2614-
if (modification_values_zv == NULL) {
2615-
if (modtype != LDAP_MODIFY_BATCH_REMOVE_ALL) {
2616-
zend_argument_value_error(3, "a modification entry must contain the "
2617-
"\"" LDAP_MODIFY_BATCH_VALUES "\" option when the \"" LDAP_MODIFY_BATCH_MODTYPE "\" option "
2618-
"is not LDAP_MODIFY_BATCH_REMOVE_ALL");
2619-
RETURN_THROWS();
2620-
}
2621-
continue;
2622-
}
2623-
if (Z_TYPE_P(modification_values_zv) != IS_ARRAY) {
2624-
zend_argument_type_error(3, "the value for option \"" LDAP_MODIFY_BATCH_VALUES "\" must be of type array, %s given", zend_zval_value_name(attrib));
2612+
zval *modification_values_zv = zend_hash_str_find(modification, LDAP_MODIFY_BATCH_VALUES, strlen(LDAP_MODIFY_BATCH_VALUES));
2613+
if (modification_values_zv == NULL) {
2614+
if (modtype != LDAP_MODIFY_BATCH_REMOVE_ALL) {
2615+
zend_argument_value_error(3, "a modification entry must contain the "
2616+
"\"" LDAP_MODIFY_BATCH_VALUES "\" option when the \"" LDAP_MODIFY_BATCH_MODTYPE "\" option "
2617+
"is not LDAP_MODIFY_BATCH_REMOVE_ALL");
26252618
RETURN_THROWS();
26262619
}
2620+
continue;
2621+
}
2622+
if (Z_TYPE_P(modification_values_zv) != IS_ARRAY) {
2623+
zend_argument_type_error(3, "the value for option \"" LDAP_MODIFY_BATCH_VALUES "\" must be of type array, %s given", zend_zval_value_name(attrib));
2624+
RETURN_THROWS();
2625+
}
26272626

2628-
SEPARATE_ARRAY(modification_values_zv);
2629-
const HashTable *modification_values = Z_ARRVAL_P(modification_values_zv);
2630-
/* is the array not empty? */
2631-
uint32_t num_modvals = zend_hash_num_elements(modification_values);
2632-
if (num_modvals == 0) {
2633-
zend_argument_value_error(3, "the value for option \"" LDAP_MODIFY_BATCH_VALUES "\" must not be empty");
2634-
RETURN_THROWS();
2635-
}
2636-
if (!zend_array_is_list(modification_values)) {
2637-
zend_argument_value_error(3, "the value for option \"" LDAP_MODIFY_BATCH_VALUES "\" must be a list");
2638-
RETURN_THROWS();
2639-
}
2640-
} ZEND_HASH_FOREACH_END();
2641-
}
2627+
SEPARATE_ARRAY(modification_values_zv);
2628+
const HashTable *modification_values = Z_ARRVAL_P(modification_values_zv);
2629+
/* is the array not empty? */
2630+
uint32_t num_modvals = zend_hash_num_elements(modification_values);
2631+
if (num_modvals == 0) {
2632+
zend_argument_value_error(3, "the value for option \"" LDAP_MODIFY_BATCH_VALUES "\" must not be empty");
2633+
RETURN_THROWS();
2634+
}
2635+
if (!zend_array_is_list(modification_values)) {
2636+
zend_argument_value_error(3, "the value for option \"" LDAP_MODIFY_BATCH_VALUES "\" must be a list");
2637+
RETURN_THROWS();
2638+
}
2639+
} ZEND_HASH_FOREACH_END();
26422640
/* validation was successful */
26432641

26442642
/* allocate array of modifications */
@@ -2647,7 +2645,6 @@ PHP_FUNCTION(ldap_modify_batch)
26472645

26482646
/* for each modification */
26492647
zend_ulong modification_index = 0;
2650-
zval *modification_zv = NULL;
26512648
ZEND_HASH_FOREACH_NUM_KEY_VAL(modifications, modification_index, modification_zv) {
26522649
ldap_mods[modification_index] = safe_emalloc(1, sizeof(LDAPMod), 0);
26532650

0 commit comments

Comments
 (0)