diff libinterp/corefcn/data.cc @ 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 bc924baa2c4e
children d63878346099
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;