]> git.sur5r.net Git - openldap/commitdiff
Plug unlikely memleak (coverity)
authorHoward Chu <hyc@openldap.org>
Tue, 13 Jan 2015 20:31:06 +0000 (20:31 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 19 Jan 2015 19:45:10 +0000 (13:45 -0600)
libraries/libldap_r/tpool.c
libraries/liblunicode/ucstr.c

index 44f9544b58e68c27aa015b1f7e195205bee386fb..3aaaf20e8a668401563455e82e4be04bc6902852 100644 (file)
@@ -266,16 +266,22 @@ ldap_pvt_thread_pool_init_q (
                max_threads = LDAP_MAXTHR;
 
        rc = ldap_pvt_thread_mutex_init(&pool->ltp_mutex);
-       if (rc != 0)
+       if (rc != 0) {
+fail:
+               for (i=0; i<numqs; i++)
+                       LDAP_FREE(pool->ltp_wqs[i]->ltp_free);
+               LDAP_FREE(pool->ltp_wqs);
+               LDAP_FREE(pool);
                return(rc);
+       }
 
        rc = ldap_pvt_thread_cond_init(&pool->ltp_cond);
        if (rc != 0)
-               return(rc);
+               goto fail;
 
        rc = ldap_pvt_thread_cond_init(&pool->ltp_pcond);
        if (rc != 0)
-               return(rc);
+               goto fail;
 
        rem_thr = max_threads % numqs;
        rem_pend = max_pending % numqs;
index ccb484e83fb354226a2227256abd3babfa873b2f..7e8f3ec13c68bdc7cbd46ee833ddddff6a818172 100644 (file)
@@ -109,6 +109,7 @@ struct berval * UTF8bvnormalize(
        void *ctx )
 {
        int i, j, len, clen, outpos, ucsoutlen, outsize, last;
+       int didnewbv = 0;
        char *out, *outtmp, *s;
        ac_uint4 *ucs, *p, *ucsout;
 
@@ -132,6 +133,7 @@ struct berval * UTF8bvnormalize(
        if ( !newbv ) {
                newbv = ber_memalloc_x( sizeof(struct berval), ctx );
                if ( !newbv ) return NULL;
+               didnewbv = 1;
        }
 
        /* Should first check to see if string is already in proper
@@ -145,6 +147,9 @@ struct berval * UTF8bvnormalize(
                        outsize = len + 7;
                        out = (char *) ber_memalloc_x( outsize, ctx );
                        if ( out == NULL ) {
+fail:
+                               if ( didnewbv )
+                                       ber_memfree_x( newbv, ctx );
                                return NULL;
                        }
                        outpos = 0;
@@ -171,7 +176,7 @@ struct berval * UTF8bvnormalize(
                        outsize = len + 7;
                        out = (char *) ber_memalloc_x( outsize, ctx );
                        if ( out == NULL ) {
-                               return NULL;
+                               goto fail;
                        }
                        outpos = i - 1;
                        memcpy(out, s, outpos);
@@ -180,7 +185,7 @@ struct berval * UTF8bvnormalize(
                outsize = len + 7;
                out = (char *) ber_memalloc_x( outsize, ctx );
                if ( out == NULL ) {
-                       return NULL;
+                       goto fail;
                }
                outpos = 0;
                i = 0;
@@ -189,7 +194,7 @@ struct berval * UTF8bvnormalize(
        p = ucs = ber_memalloc_x( len * sizeof(*ucs), ctx );
        if ( ucs == NULL ) {
                ber_memfree_x(out, ctx);
-               return NULL;
+               goto fail;
        }
 
        /* convert character before first non-ascii to ucs-4 */
@@ -207,7 +212,7 @@ struct berval * UTF8bvnormalize(
                        if ( clen == 0 ) {
                                ber_memfree_x( ucs, ctx );
                                ber_memfree_x( out, ctx );
-                               return NULL;
+                               goto fail;
                        }
                        if ( clen == 1 ) {
                                /* ascii */
@@ -219,7 +224,7 @@ struct berval * UTF8bvnormalize(
                                if ( (s[i] & 0xc0) != 0x80 ) {
                                        ber_memfree_x( ucs, ctx );
                                        ber_memfree_x( out, ctx );
-                                       return NULL;
+                                       goto fail;
                                }
                                *p <<= 6;
                                *p |= s[i] & 0x3f;
@@ -251,7 +256,7 @@ struct berval * UTF8bvnormalize(
                                                ber_memfree_x( ucsout, ctx );
                                                ber_memfree_x( ucs, ctx );
                                                ber_memfree_x( out, ctx );
-                                               return NULL;
+                                               goto fail;
                                        }
                                        out = outtmp;
                                }
@@ -275,7 +280,7 @@ struct berval * UTF8bvnormalize(
                        if (outtmp == NULL) {
                                ber_memfree_x( ucs, ctx );
                                ber_memfree_x( out, ctx );
-                               return NULL;
+                               goto fail;
                        }
                        out = outtmp;
                }