cardoe          Thu Mar 22 21:50:34 2007 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src/ext/ldap   ldap.c 
  Log:
  Replaced all instances of ldap_get_values() with ldap_get_values_len(), which 
returns back the length of the data so on non-NULL terminated data we don't 
crash in a strlen(). Removed the PHP function ldap_get_values() since it's the 
same thing as ldap_get_values_len() now and made it alias 
ldap_get_values_len(). This should fix some random PHP<->LDAP crashes
  
http://cvs.php.net/viewvc.cgi/php-src/ext/ldap/ldap.c?r1=1.161.2.3.2.3&r2=1.161.2.3.2.4&diff_format=u
Index: php-src/ext/ldap/ldap.c
diff -u php-src/ext/ldap/ldap.c:1.161.2.3.2.3 
php-src/ext/ldap/ldap.c:1.161.2.3.2.4
--- php-src/ext/ldap/ldap.c:1.161.2.3.2.3       Fri Jan  5 15:06:55 2007
+++ php-src/ext/ldap/ldap.c     Thu Mar 22 21:50:34 2007
@@ -18,11 +18,12 @@
    |          Gerrit Thomson <[EMAIL PROTECTED]>                         |
    |          Jani Taskinen  <[EMAIL PROTECTED]>                              |
    |          Stig Venaas    <[EMAIL PROTECTED]>                          |
+   |          Doug Goldstein <[EMAIL PROTECTED]>                          |
    | PHP 4.0 updates:  Zeev Suraski <[EMAIL PROTECTED]>                       |
    +----------------------------------------------------------------------+
  */
  
-/* $Id: ldap.c,v 1.161.2.3.2.3 2007/01/05 15:06:55 iliaa Exp $ */
+/* $Id: ldap.c,v 1.161.2.3.2.4 2007/03/22 21:50:34 cardoe Exp $ */
 #define IS_EXT_MODULE
 
 #ifdef HAVE_CONFIG_H
@@ -117,7 +118,7 @@
        PHP_FE(ldap_first_attribute,    third_arg_force_ref)
        PHP_FE(ldap_next_attribute,             third_arg_force_ref)
        PHP_FE(ldap_get_attributes,                                             
        NULL)
-       PHP_FE(ldap_get_values,                                                 
        NULL)
+       PHP_FALIAS(ldap_get_values,     ldap_get_values_len,                    
        NULL)
        PHP_FE(ldap_get_values_len,                                             
        NULL)
        PHP_FE(ldap_get_dn,                                                     
                NULL)
        PHP_FE(ldap_explode_dn,                                                 
        NULL)
@@ -317,7 +318,7 @@
 
        php_info_print_table_start();
        php_info_print_table_row(2, "LDAP Support", "enabled");
-       php_info_print_table_row(2, "RCS Version", "$Id: ldap.c,v 1.161.2.3.2.3 
2007/01/05 15:06:55 iliaa Exp $");
+       php_info_print_table_row(2, "RCS Version", "$Id: ldap.c,v 1.161.2.3.2.4 
2007/03/22 21:50:34 cardoe Exp $");
 
        if (LDAPG(max_links) == -1) {
                snprintf(tmp, 31, "%ld/unlimited", LDAPG(num_links));
@@ -1036,7 +1037,7 @@
        BerElement *ber;
        char *attribute;
        size_t attr_len;
-       char **ldap_value;
+       struct berval **ldap_value;
        char *dn;
 
        if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result) 
== FAILURE) {
@@ -1067,16 +1068,16 @@
                attribute = ldap_first_attribute(ldap, ldap_result_entry, &ber);
 
                while (attribute != NULL) {
-                       ldap_value = ldap_get_values(ldap, ldap_result_entry, 
attribute);
-                       num_values = ldap_count_values(ldap_value);
+                       ldap_value = ldap_get_values_len(ldap, 
ldap_result_entry, attribute);
+                       num_values = ldap_count_values_len(ldap_value);
 
                        MAKE_STD_ZVAL(tmp2);
                        array_init(tmp2);
                        add_assoc_long(tmp2, "count", num_values);
                        for (i = 0; i < num_values; i++) {
-                               add_index_string(tmp2, i, ldap_value[i], 1);
+                               add_index_stringl(tmp2, i, 
ldap_value[i]->bv_val, ldap_value[i]->bv_len, 1);
                        }       
-                       ldap_value_free(ldap_value);
+                       ldap_value_free_len(ldap_value);
 
                        attr_len = strlen(attribute);
                        zend_hash_update(Z_ARRVAL_P(tmp1), 
php_strtolower(attribute, attr_len), attr_len+1, (void *) &tmp2, sizeof(zval 
*), NULL);
@@ -1183,7 +1184,7 @@
        ldap_linkdata *ld;
        ldap_resultentry *resultentry;
        char *attribute;
-       char **ldap_value;
+       struct berval **ldap_value;
        int i, num_values, num_attrib;
        BerElement *ber;
 
@@ -1199,16 +1200,16 @@
        
        attribute = ldap_first_attribute(ld->link, resultentry->data, &ber);
        while (attribute != NULL) {
-               ldap_value = ldap_get_values(ld->link, resultentry->data, 
attribute);
-               num_values = ldap_count_values(ldap_value);
+               ldap_value = ldap_get_values_len(ld->link, resultentry->data, 
attribute);
+               num_values = ldap_count_values_len(ldap_value);
 
                MAKE_STD_ZVAL(tmp);
                array_init(tmp);
                add_assoc_long(tmp, "count", num_values);
                for (i = 0; i < num_values; i++) {
-                       add_index_string(tmp, i, ldap_value[i], 1);
+                       add_index_stringl(tmp, i, ldap_value[i]->bv_val, 
ldap_value[i]->bv_len, 1);
                }
-               ldap_value_free(ldap_value);
+               ldap_value_free_len(ldap_value);
 
                zend_hash_update(Z_ARRVAL_P(return_value), attribute, 
strlen(attribute)+1, (void *) &tmp, sizeof(zval *), NULL);
                add_index_string(return_value, num_attrib, attribute, 1);
@@ -1229,46 +1230,6 @@
 }
 /* }}} */
 
-/* {{{ proto array ldap_get_values(resource link, resource result_entry, 
string attribute)
-   Get all values from a result entry */
-PHP_FUNCTION(ldap_get_values)
-{
-       zval **link, **result_entry, **attr;
-       ldap_linkdata *ld;
-       ldap_resultentry *resultentry;
-       char *attribute;
-       char **ldap_value;
-       int i, num_values;
-
-       if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link, 
&result_entry, &attr) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link", 
le_link);
-       ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1, 
"ldap result entry", le_result_entry);
-
-       convert_to_string_ex(attr);
-       attribute = Z_STRVAL_PP(attr);
-
-       if ((ldap_value = ldap_get_values(ld->link, resultentry->data, 
attribute)) == NULL) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot get the 
value(s) of attribute %s", ldap_err2string(_get_lderrno(ld->link)));
-               RETURN_FALSE;
-       }
-
-       num_values = ldap_count_values(ldap_value);
-
-       array_init(return_value);
-
-       for (i = 0; i<num_values; i++) {
-               add_next_index_string(return_value, ldap_value[i], 1);
-       }
-       
-       add_assoc_long(return_value, "count", num_values);
-       ldap_value_free(ldap_value);
-
-}
-/* }}} */
-
 /* {{{ proto array ldap_get_values_len(resource link, resource result_entry, 
string attribute)
    Get all values with lengths from a result entry */
 PHP_FUNCTION(ldap_get_values_len)

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to