Mercurial > octave-nkf
changeset 17621:d41c8f96ed06
avoid memory leaks in base_64_encode and base_64_decode (bug #40228)
* data.cc (Fbase64_encode): Free array allocated by
octave_base64_encode.
* oct-base64.cc (octave_base64_decode): Free array allocated by
base64_decode_alloc.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 09 Oct 2013 22:38:43 -0400 |
parents | 83e6baf0bc3f |
children | fd712a12fe53 |
files | libinterp/corefcn/data.cc liboctave/util/oct-base64.cc |
diffstat | 2 files changed, 15 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/data.cc Wed Oct 09 12:26:40 2013 -0700 +++ b/libinterp/corefcn/data.cc Wed Oct 09 22:38:43 2013 -0400 @@ -7343,10 +7343,13 @@ reinterpret_cast<const char*> (in.data ()); \ char* out; \ if (! error_state \ - && octave_base64_encode (inc, inlen, &out)) \ - retval(0) = octave_value (out); \ + && octave_base64_encode (inc, inlen, &out)) \ + { \ + retval(0) = octave_value (out); \ + ::free (out); \ + } \ } - + MAKE_INT_BRANCH(int8) else MAKE_INT_BRANCH(int16) else MAKE_INT_BRANCH(int32) @@ -7370,7 +7373,10 @@ char* out; if (! error_state && octave_base64_encode (inc, inlen, &out)) - retval(0) = octave_value (out); + { + retval(0) = octave_value (out); + ::free (out); + } } else { @@ -7382,7 +7388,10 @@ char* out; if (! error_state && octave_base64_encode (inc, inlen, &out)) - retval(0) = octave_value (out); + { + retval(0) = octave_value (out); + ::free (out); + } } } return retval;
--- a/liboctave/util/oct-base64.cc Wed Oct 09 12:26:40 2013 -0700 +++ b/liboctave/util/oct-base64.cc Wed Oct 09 22:38:43 2013 -0400 @@ -82,6 +82,7 @@ retval.resize (dim_vector (1, len)); double *dout = reinterpret_cast<double*> (out); std::copy (dout, dout + len, retval.fortran_vec ()); + ::free (out); } }