More err_data memory leaks
authorBodo Möller <bodo@openssl.org>
Thu, 15 Mar 2001 11:33:00 +0000 (11:33 +0000)
committerBodo Möller <bodo@openssl.org>
Thu, 15 Mar 2001 11:33:00 +0000 (11:33 +0000)
CHANGES
crypto/err/err.c

diff --git a/CHANGES b/CHANGES
index b2075c769e7c0e743368c73459894ab9421c4c6f..f943fa1113f9d87b07ef1286efdac248efe290f6 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,7 +4,8 @@
 
  Changes between 0.9.6 and 0.9.6a  [xx XXX 2001]
 
-  *) Fix a memory leak in err.c: free err_data string if necessary.
+  *) Fix memory leaks in err.c: free err_data string if necessary;
+     don't write to the wrong index in ERR_set_error_data.
      [Bodo Moeller]
 
   *) Implement ssl23_peek (analogous to ssl23_read), which previously
index 7579c9cea81a51cba13a48297afe2c2e374309f5..be4a71ed06639788b75b85acc80496bb1373633e 100644 (file)
@@ -387,20 +387,18 @@ void ERR_put_error(int lib, int func, int reason, const char *file,
 
 void ERR_clear_error(void)
        {
+       int i;
        ERR_STATE *es;
 
        es=ERR_get_state();
 
-#if 0
-       /* hmm... is this needed */
        for (i=0; i<ERR_NUM_ERRORS; i++)
                {
                es->err_buffer[i]=0;
+               err_clear_data(es,i);
                es->err_file[i]=NULL;
                es->err_line[i]= -1;
-               err_clear_data(es,i);
                }
-#endif
        es->top=es->bottom=0;
        }
 
@@ -754,8 +752,9 @@ void ERR_set_error_data(char *data, int flags)
        if (i == 0)
                i=ERR_NUM_ERRORS-1;
 
+       err_clear_data(es,i);
        es->err_data[i]=data;
-       es->err_data_flags[es->top]=flags;
+       es->err_data_flags[i]=flags;
        }
 
 void ERR_add_error_data(int num, ...)
@@ -764,7 +763,7 @@ void ERR_add_error_data(int num, ...)
        int i,n,s;
        char *str,*p,*a;
 
-       s=64;
+       s=80;
        str=OPENSSL_malloc(s+1);
        if (str == NULL) return;
        str[0]='\0';