@@ -2533,112 +2533,110 @@ PHP_FUNCTION(ldap_modify_batch)
2533
2533
VERIFY_LDAP_LINK_CONNECTED (ld );
2534
2534
2535
2535
/* 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" );
2540
2556
RETURN_THROWS ();
2541
2557
}
2542
2558
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 "\"" );
2546
2566
RETURN_THROWS ();
2547
2567
}
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" );
2550
2580
RETURN_THROWS ();
2551
2581
}
2552
2582
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
+ }
2612
2611
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" );
2625
2618
RETURN_THROWS ();
2626
2619
}
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
+ }
2627
2626
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 ();
2642
2640
/* validation was successful */
2643
2641
2644
2642
/* allocate array of modifications */
@@ -2647,7 +2645,6 @@ PHP_FUNCTION(ldap_modify_batch)
2647
2645
2648
2646
/* for each modification */
2649
2647
zend_ulong modification_index = 0 ;
2650
- zval * modification_zv = NULL ;
2651
2648
ZEND_HASH_FOREACH_NUM_KEY_VAL (modifications , modification_index , modification_zv ) {
2652
2649
ldap_mods [modification_index ] = safe_emalloc (1 , sizeof (LDAPMod ), 0 );
2653
2650
0 commit comments