Hi,
I found a memory leak in main/sockets/src/sockets.cc. To trigger it:

a)
send data (here using netcat):
$nc -l -p 9897 -q0 </dev/zero

b)
read it in octave:

client = socket(AF_INET, SOCK_STREAM, 0);
server_info = struct("addr", "127.0.0.1", "port", 9897);
rc = connect(client, server_info);
while 1
[msg_s, len_s] = recv(client,1000);
end

...and after a while all memory is gone.


The patch (obtained with svn diff) is as below. There are some other
changes as well:  cut/paste typo, a delete which should have been
delete[]. I added a check for requesting negative receive length as well.

svn diff
Index: sockets.cc
===================================================================
--- sockets.cc  (revision 6087)
+++ sockets.cc  (arbetskopia)
@@ -534,7 +534,7 @@
     for ( int i = 0 ; i < d1.length() ; i++ )
       buf[i] = (unsigned char)d1(i);
     retval = ::send( s->get_sock_fd(), (const char*)buf,
data.byte_size(), 0 );
-    delete buf;
+    delete[] buf;
   }
   else
   {
@@ -577,11 +577,14 @@
   }
   else
   {
-    error("connect: expecting a octave_socket or integer");
+    error("recv: expecting a octave_socket or integer");
     return octave_value(-1);
   }

   long len = args(1).int_value();
+  if(len<0)
+    error("recv: negative receive length requested");
+
   unsigned char* buf = new unsigned char[ len ];
 #ifndef __WIN32__
   retval = ::recv( s->get_sock_fd(), buf, len, flags );
@@ -594,6 +597,8 @@
   for ( int i = 0 ; i < retval ; i++ )
     return_buf(0,i) = buf[i];

+  delete[] buf;
+
   octave_value in_buf(return_buf);
   octave_value out_buf;
   OCTAVE_TYPE_CONV( in_buf, out_buf, uint8 );



I would appreciate if I am allowed to join the octave with commit right.
My username is paulsundvall.

thanks,
paul

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Octave-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/octave-dev

Reply via email to