@@ -1456,8 +1456,8 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
1456
1456
{
1457
1457
zval * link , * base_dn , * filter , * attrs = NULL , * attr , * serverctrls = NULL ;
1458
1458
zend_long attrsonly , sizelimit , timelimit , deref ;
1459
- zend_string * ldap_filter , * tmpstring ;
1460
- char * ldap_base_dn = NULL , * * ldap_attrs = NULL ;
1459
+ zend_string * ldap_filter = NULL , * ldap_base_dn = NULL , * tmpstring ;
1460
+ char * * ldap_attrs = NULL ;
1461
1461
ldap_linkdata * ld = NULL ;
1462
1462
LDAPMessage * ldap_res ;
1463
1463
LDAPControl * * lserverctrls = NULL ;
@@ -1527,11 +1527,10 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
1527
1527
zend_hash_internal_pointer_reset (Z_ARRVAL_P (base_dn ));
1528
1528
} else {
1529
1529
nbases = 0 ; /* this means string, not array */
1530
- /* If anything else than string is passed, ldap_base_dn = NULL */
1531
- if (Z_TYPE_P (base_dn ) == IS_STRING ) {
1532
- ldap_base_dn = Z_STRVAL_P (base_dn );
1533
- } else {
1534
- ldap_base_dn = NULL ;
1530
+ ldap_base_dn = zval_get_string (base_dn );
1531
+ if (EG (exception )) {
1532
+ ret = 0 ;
1533
+ goto cleanup ;
1535
1534
}
1536
1535
}
1537
1536
@@ -1546,6 +1545,10 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
1546
1545
} else {
1547
1546
nfilters = 0 ; /* this means string, not array */
1548
1547
ldap_filter = zval_get_string (filter );
1548
+ if (EG (exception )) {
1549
+ ret = 0 ;
1550
+ goto cleanup ;
1551
+ }
1549
1552
}
1550
1553
1551
1554
lds = safe_emalloc (nlinks , sizeof (ldap_linkdata ), 0 );
@@ -1563,18 +1566,20 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
1563
1566
if (nbases != 0 ) { /* base_dn an array? */
1564
1567
entry = zend_hash_get_current_data (Z_ARRVAL_P (base_dn ));
1565
1568
zend_hash_move_forward (Z_ARRVAL_P (base_dn ));
1566
-
1567
- /* If anything else than string is passed, ldap_base_dn = NULL */
1568
- if (Z_TYPE_P (entry ) == IS_STRING ) {
1569
- ldap_base_dn = Z_STRVAL_P (entry );
1570
- } else {
1571
- ldap_base_dn = NULL ;
1569
+ ldap_base_dn = zval_get_string (entry );
1570
+ if (EG (exception )) {
1571
+ ret = 0 ;
1572
+ goto cleanup_parallel ;
1572
1573
}
1573
1574
}
1574
1575
if (nfilters != 0 ) { /* filter an array? */
1575
1576
entry = zend_hash_get_current_data (Z_ARRVAL_P (filter ));
1576
1577
zend_hash_move_forward (Z_ARRVAL_P (filter ));
1577
1578
ldap_filter = zval_get_string (entry );
1579
+ if (EG (exception )) {
1580
+ ret = 0 ;
1581
+ goto cleanup_parallel ;
1582
+ }
1578
1583
}
1579
1584
1580
1585
if (argcount > 8 ) {
@@ -1590,7 +1595,7 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
1590
1595
php_set_opts (ld -> link , ldap_sizelimit , ldap_timelimit , ldap_deref , & old_ldap_sizelimit , & old_ldap_timelimit , & old_ldap_deref );
1591
1596
1592
1597
/* Run the actual search */
1593
- ldap_search_ext (ld -> link , ldap_base_dn , scope , ZSTR_VAL (ldap_filter ), ldap_attrs , ldap_attrsonly , lserverctrls , NULL , NULL , ldap_sizelimit , & rcs [i ]);
1598
+ ldap_search_ext (ld -> link , ZSTR_VAL ( ldap_base_dn ) , scope , ZSTR_VAL (ldap_filter ), ldap_attrs , ldap_attrsonly , lserverctrls , NULL , NULL , ldap_sizelimit , & rcs [i ]);
1594
1599
lds [i ] = ld ;
1595
1600
zend_hash_move_forward (Z_ARRVAL_P (link ));
1596
1601
}
@@ -1615,10 +1620,15 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
1615
1620
efree (rcs );
1616
1621
} else {
1617
1622
ldap_filter = zval_get_string (filter );
1623
+ if (EG (exception )) {
1624
+ ret = 0 ;
1625
+ goto cleanup ;
1626
+ }
1618
1627
1619
- /* If anything else than string is passed, ldap_base_dn = NULL */
1620
- if (Z_TYPE_P (base_dn ) == IS_STRING ) {
1621
- ldap_base_dn = Z_STRVAL_P (base_dn );
1628
+ ldap_base_dn = zval_get_string (base_dn );
1629
+ if (EG (exception )) {
1630
+ ret = 0 ;
1631
+ goto cleanup ;
1622
1632
}
1623
1633
1624
1634
ld = (ldap_linkdata * ) zend_fetch_resource_ex (link , "ldap link" , le_link );
@@ -1638,7 +1648,7 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)
1638
1648
php_set_opts (ld -> link , ldap_sizelimit , ldap_timelimit , ldap_deref , & old_ldap_sizelimit , & old_ldap_timelimit , & old_ldap_deref );
1639
1649
1640
1650
/* Run the actual search */
1641
- errno = ldap_search_ext_s (ld -> link , ldap_base_dn , scope , ZSTR_VAL (ldap_filter ), ldap_attrs , ldap_attrsonly , lserverctrls , NULL , NULL , ldap_sizelimit , & ldap_res );
1651
+ errno = ldap_search_ext_s (ld -> link , ZSTR_VAL ( ldap_base_dn ) , scope , ZSTR_VAL (ldap_filter ), ldap_attrs , ldap_attrsonly , lserverctrls , NULL , NULL , ldap_sizelimit , & ldap_res );
1642
1652
1643
1653
if (errno != LDAP_SUCCESS
1644
1654
&& errno != LDAP_SIZELIMIT_EXCEEDED
@@ -2560,7 +2570,8 @@ PHP_FUNCTION(ldap_modify_batch)
2560
2570
{
2561
2571
zval * serverctrls = NULL ;
2562
2572
ldap_linkdata * ld ;
2563
- zval * link , * mods , * mod , * modinfo , * modval ;
2573
+ zval * link , * mods , * mod , * modinfo ;
2574
+ zend_string * modval ;
2564
2575
zval * attrib , * modtype , * vals ;
2565
2576
zval * fetched ;
2566
2577
char * dn ;
@@ -2736,13 +2747,6 @@ PHP_FUNCTION(ldap_modify_batch)
2736
2747
php_error_docref (NULL , E_WARNING , "A '" LDAP_MODIFY_BATCH_VALUES "' array must have consecutive indices 0, 1, ..." );
2737
2748
RETURN_FALSE ;
2738
2749
}
2739
- modval = fetched ;
2740
-
2741
- /* is the data element a string? */
2742
- if (Z_TYPE_P (modval ) != IS_STRING ) {
2743
- php_error_docref (NULL , E_WARNING , "Each element of a '" LDAP_MODIFY_BATCH_VALUES "' array must be a string" );
2744
- RETURN_FALSE ;
2745
- }
2746
2750
}
2747
2751
}
2748
2752
@@ -2805,14 +2809,20 @@ PHP_FUNCTION(ldap_modify_batch)
2805
2809
for (j = 0 ; j < num_modvals ; j ++ ) {
2806
2810
/* fetch it */
2807
2811
fetched = zend_hash_index_find (Z_ARRVAL_P (vals ), j );
2808
- modval = fetched ;
2812
+ modval = zval_get_string (fetched );
2813
+ if (EG (exception )) {
2814
+ RETVAL_FALSE ;
2815
+ ldap_mods [i ]-> mod_bvalues [j ] = NULL ;
2816
+ num_mods = i + 1 ;
2817
+ goto cleanup ;
2818
+ }
2809
2819
2810
2820
/* allocate the data struct */
2811
2821
ldap_mods [i ]-> mod_bvalues [j ] = safe_emalloc (1 , sizeof (struct berval ), 0 );
2812
2822
2813
2823
/* fill it */
2814
- ldap_mods [i ]-> mod_bvalues [j ]-> bv_len = Z_STRLEN_P (modval );
2815
- ldap_mods [i ]-> mod_bvalues [j ]-> bv_val = estrndup (Z_STRVAL_P (modval ), Z_STRLEN_P (modval ));
2824
+ ldap_mods [i ]-> mod_bvalues [j ]-> bv_len = ZSTR_LEN (modval );
2825
+ ldap_mods [i ]-> mod_bvalues [j ]-> bv_val = estrndup (ZSTR_VAL (modval ), ZSTR_LEN (modval ));
2816
2826
}
2817
2827
2818
2828
/* NULL-terminate values */
0 commit comments