tony2001                Wed Apr 16 13:17:44 2008 UTC

  Modified files:              
    /php-src/ext/ldap   ldap.c 
  Log:
  unicode support and minor leak fix
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/ldap/ldap.c?r1=1.181&r2=1.182&diff_format=u
Index: php-src/ext/ldap/ldap.c
diff -u php-src/ext/ldap/ldap.c:1.181 php-src/ext/ldap/ldap.c:1.182
--- php-src/ext/ldap/ldap.c:1.181       Wed Apr 16 13:02:26 2008
+++ php-src/ext/ldap/ldap.c     Wed Apr 16 13:17:44 2008
@@ -23,7 +23,7 @@
    +----------------------------------------------------------------------+
  */
  
-/* $Id: ldap.c,v 1.181 2008/04/16 13:02:26 tony2001 Exp $ */
+/* $Id: ldap.c,v 1.182 2008/04/16 13:17:44 tony2001 Exp $ */
 #define IS_EXT_MODULE
 
 #ifdef HAVE_CONFIG_H
@@ -237,7 +237,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.181 
2008/04/16 13:02:26 tony2001 Exp $");
+       php_info_print_table_row(2, "RCS Version", "$Id: ldap.c,v 1.182 
2008/04/16 13:17:44 tony2001 Exp $");
 
        if (LDAPG(max_links) == -1) {
                snprintf(tmp, 31, "%ld/unlimited", LDAPG(num_links));
@@ -1294,9 +1294,10 @@
        ldap_linkdata *ld;
        char *dn;
        LDAPMod **ldap_mods;
-       int i, j, num_attribs, num_values, dn_len;
+       int i, j, num_attribs, num_values, dn_len, res;
+       unsigned int attribute_len;
        int *num_berval;
-       char *attribute;
+       zstr attribute;
        ulong index;
        int is_full_add=0; /* flag for full add operation so ldap_mod_add can 
be put back into oper, gerrit THomson */
 
@@ -1322,13 +1323,27 @@
                ldap_mods[i] = emalloc(sizeof(LDAPMod));
                ldap_mods[i]->mod_op = oper | LDAP_MOD_BVALUES;
 
-               if (zend_hash_get_current_key(Z_ARRVAL_P(entry), &attribute, 
&index, 0) == HASH_KEY_IS_STRING) {
-                       ldap_mods[i]->mod_type = estrdup(attribute);
+               res = zend_hash_get_current_key_ex(Z_ARRVAL_P(entry), 
&attribute, &attribute_len, &index, 0, NULL);
+               if (res == HASH_KEY_IS_STRING) {
+                       ldap_mods[i]->mod_type = estrndup(attribute.s, 
attribute_len - 1);
+               } else if (res == HASH_KEY_IS_UNICODE) {
+                       char *tmp = zend_unicode_to_ascii(attribute.u, 
attribute_len - 1 TSRMLS_CC);
+                       if (tmp) {
+                               ldap_mods[i]->mod_type = estrdup(tmp);
+                       } else {
+                               ldap_mods[i]->mod_type = NULL;
+                               goto error_out;
+                       }
                } else {
+error_out:
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown 
attribute in the data");
                        /* Free allocated memory */
                        while (i >= 0) {
-                               efree(ldap_mods[i--]);
+                               if (ldap_mods[i]->mod_type) {
+                                       efree(ldap_mods[i]->mod_type);
+                               }
+                               efree(ldap_mods[i]);
+                               i--;
                        }
                        efree(num_berval);
                        efree(ldap_mods);       



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

Reply via email to