op->o_res = LLOAD_OP_COMPLETED;
- if ( ber_decode_int( &op->o_request, &needle.o_client_msgid ) ) {
+ if ( ber_decode_int( &op->o_request, &needle.o_client_msgid ) ||
+ needle.o_client_msgid <= 0 ) {
Debug( LDAP_DEBUG_STATS, "request_abandon: "
"connid=%lu msgid=%d invalid integer sent in abandon request\n",
c->c_connid, op->o_client_msgid );
return -1;
}
+ if ( op->o_client_msgid == needle.o_client_msgid ) {
+ Debug( LDAP_DEBUG_STATS, "request_abandon: "
+ "connid=%lu msgid=%d requests abandon of itself\n",
+ c->c_connid, op->o_client_msgid );
+ goto done;
+ }
+
CONNECTION_LOCK(c);
request = ldap_tavl_find( c->c_ops, &needle, operation_client_cmp );
if ( !request ) {