cvs: php4 /ext/ldap ldap.c
| From: | Stig Venaas | Date: | Mon, 05 Nov 2001 11:50:52 +0000 |
| Subject: | cvs: php4 /ext/ldap ldap.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-8082@lists.php.net to get a copy of this message | ||
venaas Mon Nov 5 06:50:52 2001 EDT
Modified files:
/php4/ext/ldap ldap.c
Log:
Fixed seg fault when using ldap_add (or modify) with value array not
indexed as 0, 1, ... In some cases it didn't give seg fault, but used
previously added value. Now gives warning.
@- Made ldap_add (and modify) give warning with illegal value arrays.
@ Previously seg faulted or added wrong value (Stig Venaas)
Index: php4/ext/ldap/ldap.c
diff -u php4/ext/ldap/ldap.c:1.100 php4/ext/ldap/ldap.c:1.101
--- php4/ext/ldap/ldap.c:1.100 Thu Oct 11 19:33:01 2001
+++ php4/ext/ldap/ldap.c Mon Nov 5 06:50:52 2001
@@ -22,7 +22,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: ldap.c,v 1.100 2001/10/11 23:33:01 ssb Exp $ */
+/* $Id: ldap.c,v 1.101 2001/11/05 11:50:52 venaas Exp $ */
#define IS_EXT_MODULE
#ifdef HAVE_CONFIG_H
@@ -257,7 +257,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.100 2001/10/11 23:33:01
ssb Exp $" );
+ php_info_print_table_row(2, "RCS Version", "$Id: ldap.c,v 1.101 2001/11/05 11:50:52
venaas Exp $" );
php_info_print_table_row(2, "Total Links", maxl );
#ifdef LDAP_API_VERSION
@@ -1343,7 +1343,13 @@
ldap_mods[i]->mod_bvalues[0]->bv_val = Z_STRVAL_PP(value);
} else {
for(j=0; j < num_values; j++) {
- zend_hash_index_find(Z_ARRVAL_PP(value), j, (void **) &ivalue);
+ if (zend_hash_index_find(Z_ARRVAL_PP(value), j, (void **) &ivalue) == FAILURE) {
+ php_error(E_WARNING, "LDAP: Value array must have consecutive indices 0, 1, ...");
+ num_berval[i] = j;
+ num_attribs = i + 1;
+ RETVAL_FALSE;
+ goto errexit;
+ }
convert_to_string_ex(ivalue);
ldap_mods[i]->mod_bvalues[j] = (struct berval *) emalloc (sizeof(struct berval));
ldap_mods[i]->mod_bvalues[j]->bv_len = Z_STRLEN_PP(ivalue);
@@ -1370,6 +1376,7 @@
} else RETVAL_TRUE;
}
+errexit:
for(i=0; i < num_attribs; i++) {
efree(ldap_mods[i]->mod_type);
for(j=0; j<num_berval[i]; j++) {