]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9876 Some more leaks plugged
authorOndřej Kuzník <ondra@mistotebe.net>
Thu, 7 Jul 2022 15:42:10 +0000 (16:42 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 11 Jul 2022 16:41:26 +0000 (16:41 +0000)
clients/tools/ldapsearch.c
libraries/libldap/deref.c

index a0ca0d79fd5b5f0303260e7f32554cb9f09ff229..02b49bd1cdb00fd3fdde07de1974971394ef74e1 100644 (file)
@@ -1866,12 +1866,13 @@ again:
                        if ( ldapsync && sync_slimit != -1 &&
                                        nresponses_psearch >= sync_slimit ) {
                                BerElement *msgidber = NULL;
-                               struct berval *msgidvalp = NULL;
+                               struct berval msgidval;
                                msgidber = ber_alloc_t(LBER_USE_DER);
                                ber_printf(msgidber, "{i}", msgid);
-                               ber_flatten(msgidber, &msgidvalp);
+                               ber_flatten2( msgidber, &msgidval, 0 );
                                ldap_extended_operation(ld, LDAP_EXOP_CANCEL,
-                                       msgidvalp, NULL, NULL, &cancel_msgid);
+                                       &msgidval, NULL, NULL, &cancel_msgid);
+                               ber_free( msgidber, 1 );
                                nresponses_psearch = -1;
                        }
                }
index 7d3471ad3477653806a096492db38aec9b1a4f63..f187a9fd44159589b10e65d77f5440b86f56f5ea 100644 (file)
@@ -160,7 +160,8 @@ ldap_parse_derefresponse_control(
        LDAPControl     *ctrl,
        LDAPDerefRes    **drp2 )
 {
-       BerElement *ber;
+       BerElementBuffer berbuf;
+       BerElement *ber = (BerElement *)&berbuf;
        ber_tag_t tag;
        ber_len_t len;
        char *last;
@@ -172,13 +173,8 @@ ldap_parse_derefresponse_control(
                return LDAP_PARAM_ERROR;
        }
 
-       /* Create a BerElement from the berval returned in the control. */
-       ber = ber_init( &ctrl->ldctl_value );
-
-       if ( ber == NULL ) {
-               ld->ld_errno = LDAP_NO_MEMORY;
-               return ld->ld_errno;
-       }
+       /* Set up a BerElement from the berval returned in the control. */
+       ber_init2( ber, &ctrl->ldctl_value, 0 );
 
        /* Extract the count and cookie from the control. */
        drp = &drhead;
@@ -193,7 +189,6 @@ ldap_parse_derefresponse_control(
                dr = LDAP_CALLOC( 1, sizeof(LDAPDerefRes) );
                if ( dr == NULL ) {
                        ldap_derefresponse_free( drhead );
-                       ber_free( ber, 1 );
                        *drp2 = NULL;
                        ld->ld_errno = LDAP_NO_MEMORY;
                        return ld->ld_errno;
@@ -244,8 +239,6 @@ ldap_parse_derefresponse_control(
        tag = 0;
 
 done:;
-        ber_free( ber, 1 );
-
        if ( tag == LBER_ERROR ) {
                if ( drhead != NULL ) {
                        ldap_derefresponse_free( drhead );