ldap/servers/slapd/connection.c | 9 +++++++--
ldap/servers/slapd/operation.c | 6 ++++--
2 files changed, 11 insertions(+), 4 deletions(-)
New commits:
commit 65aa3e0286b94651fd20f551831217ffdb97518e
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Fri Sep 27 09:48:22 2013 -0400
Ticket 47532 - 1.3.1 with mozldap crashes in new operation work_q code
Bug Description: The changes from ticket 513 seem to trigger two crashes when using
mozldap.
Fix Description: When freeing a operation/ber we need to check if the ber is NULL,
and
when getting a operation from the stack and stack operation is
NULL,
we need to create a new operaton, and not try to init the empty
one.
https://fedorahosted.org/389/ticket/47532
Reviewed by: rmeggins(Thanks!)
diff --git a/ldap/servers/slapd/connection.c b/ldap/servers/slapd/connection.c
index 92352e0..4397c2a 100644
--- a/ldap/servers/slapd/connection.c
+++ b/ldap/servers/slapd/connection.c
@@ -138,8 +138,13 @@ connection_get_operation(void)
plugin_get_server_plg() ));
} else {
PR_AtomicDecrement(&op_stack_size);
- operation_init(stack_obj->op,
- plugin_build_operation_action_bitmap( 0, plugin_get_server_plg() ));
+ if(!stack_obj->op){
+ stack_obj->op = operation_new( plugin_build_operation_action_bitmap( 0,
+ plugin_get_server_plg() ));
+ } else {
+ operation_init(stack_obj->op,
+ plugin_build_operation_action_bitmap( 0, plugin_get_server_plg() ));
+ }
}
return stack_obj;
}
diff --git a/ldap/servers/slapd/operation.c b/ldap/servers/slapd/operation.c
index 1c5c9b5..9237872 100644
--- a/ldap/servers/slapd/operation.c
+++ b/ldap/servers/slapd/operation.c
@@ -254,8 +254,10 @@ operation_done( Slapi_Operation **op, Connection *conn )
ber_init2((*op)->o_ber, NULL, options);
}
#else
- ber_special_free(*op, (*op)->o_ber); /* have to free everything here */
- *op = NULL;
+ if((*op)->o_ber){
+ ber_special_free(*op, (*op)->o_ber); /* have to free everything here */
+ *op = NULL;
+ }
#endif
}
}