re GNATS java.net/57 (potential buffer overruns)
authorBryce McKinlay <bryce@albatross.co.nz>
Tue, 23 Nov 1999 11:40:26 +0000 (11:40 +0000)
committerBryce McKinlay <bryce@gcc.gnu.org>
Tue, 23 Nov 1999 11:40:26 +0000 (11:40 +0000)
1999-11-23  Bryce McKinlay  <bryce@albatross.co.nz>

        * java/net/natPlainSocketImpl.cc: Fix potential buffer overruns in
        Exception messages. PR java.net/57.
        (bind): set SO_REUSEADDR before bind.
        * java/net/natPlainDatagramSocketImpl.cc: Fix potential buffer
        overruns. PR java.net/57.

From-SVN: r30637

libjava/ChangeLog
libjava/java/net/natPlainDatagramSocketImpl.cc
libjava/java/net/natPlainSocketImpl.cc

index 0fbce0840f4eddffad92ef0dd0647e547c18013d..586d1213833bbed1864e853ee6fe621419167253 100644 (file)
@@ -1,3 +1,11 @@
+1999-11-23  Bryce McKinlay  <bryce@albatross.co.nz>
+
+       * java/net/natPlainSocketImpl.cc: Fix potential buffer overruns in
+       Exception messages. PR java.net/57.
+       (bind): set SO_REUSEADDR before bind.
+       * java/net/natPlainDatagramSocketImpl.cc: Fix potential buffer
+       overruns. PR java.net/57.
+
 1999-11-19  Tom Tromey  <tromey@cygnus.com>
 
        * Makefile.am (DIVIDESPEC): Removed.
index 6ff9ca09883d4b36755e9ef9ccb7adc69ec6e2d6..472faafcf1db578bd067d68182085bea9d2d2cb3 100644 (file)
@@ -152,9 +152,9 @@ java::net::PlainDatagramSocketImpl::create ()
   int sock = ::socket (AF_INET, SOCK_DGRAM, 0);
   if (sock < 0)
     {
-      char msg[100];
+      char msg[80];
       char* strerr = strerror (errno);
-      sprintf (msg, "DatagramSocketImpl.create: %.*s", 80, strerr);
+      sprintf (msg, "%.*s", 80, strerr);
       JvThrow (new java::net::SocketException (JvNewStringUTF (msg)));
     }
   fnum = sock;
@@ -206,9 +206,9 @@ java::net::PlainDatagramSocketImpl::bind (jint lport,
       return;
     }
  error:
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "DatagramSocketImpl.bind: %.*s", 80, strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::net::BindException (JvNewStringUTF (msg)));
 }
 
@@ -246,9 +246,9 @@ java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *i)
   i->address = raddr;
   return rport;
  error:
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "DatagramSocketImpl.peek: %.*s", 80, strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
 }
 
@@ -284,9 +284,9 @@ java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *p)
   if (::sendto (fnum, (char *) dbytes, p->getLength(), 0, ptr, len) >= 0)
     return;
  error:
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "DatagramSocketImpl.send: %.*s", 80, strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
 }
 
@@ -344,9 +344,9 @@ java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p)
   p->setLength ((jint) retlen);
   return;
  error:
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "DatagramSocketImpl.receive: %.*s", 80, strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
 }
 
@@ -359,9 +359,9 @@ java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl)
   if (::setsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, val_len) == 0)
     return;
 
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "DatagramSocketImpl.setTimeToLive: %.*s", 80, strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
 }
 
@@ -374,9 +374,9 @@ java::net::PlainDatagramSocketImpl::getTimeToLive ()
   if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, &val_len) == 0)
     return ((int) val) & 0xFF;
 
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "DatagramSocketImpl.getTimeToLive: %.*s", 80, strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
 }
 
@@ -423,10 +423,9 @@ java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *inetaddr,
   if (::setsockopt (fnum, level, opname, ptr, len) == 0)
     return;
  error:
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "DatagramSocketImpl.%s: %.*s", join ? "join" : "leave", 80,
-    strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
 }
 
@@ -531,9 +530,9 @@ java::net::PlainDatagramSocketImpl::setOption (jint optID,
     }
 
  error:
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "DatagramSocketImpl.setOption: %.*s", 80, strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::net::SocketException (JvNewStringUTF (msg)));
 }
 
@@ -633,9 +632,9 @@ java::net::PlainDatagramSocketImpl::getOption (jint optID)
     }
 
  error:
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "DatagramSocketImpl.getOption: %.*s", 80, strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::net::SocketException (JvNewStringUTF (msg)));
 }
 
index 62dafd32cdd8a9a6a406971d1600d551b75c0245..732eb36155fe4b162c7e70fb20abf56e2a89e871 100644 (file)
@@ -84,7 +84,7 @@ java::net::PlainSocketImpl::setOption (jint, java::lang::Object *)
 java::lang::Object *
 java::net::PlainSocketImpl::getOption (jint)
 {
-  JvThrow (new SocketException (JvNewStringLatin1 ("SocketImpl.create: unimplemented")));
+  JvThrow (new SocketException (JvNewStringLatin1 ("SocketImpl.getOption: unimplemented")));
 }
 
 #else /* DISABLE_JAVA_NET */
@@ -124,6 +124,7 @@ java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport)
   jbyteArray haddress = host->address;
   jbyte *bytes = elements (haddress);
   int len = haddress->length;
+  int i = 1;
 
   if (len == 4)
     {
@@ -146,6 +147,10 @@ java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport)
 #endif
   else
     goto error;
+
+  // Enable SO_REUSEADDR, so that servers can reuse ports left in TIME_WAIT.
+  ::setsockopt(fnum, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
+  
   if (::bind (fnum, ptr, len) == 0)
     {
       address = host;
@@ -159,9 +164,9 @@ java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport)
       return;
     }
  error:
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "SocketImpl.bind: %.*s", 80, strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::net::BindException (JvNewStringUTF (msg)));
 }
 
@@ -204,9 +209,9 @@ java::net::PlainSocketImpl::connect (java::net::InetAddress *host, jint rport)
       goto error;
   return;  
  error:
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "SocketImpl.connect: %.*s", 80, strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::net::ConnectException (JvNewStringUTF (msg)));
 }
 
@@ -215,9 +220,9 @@ java::net::PlainSocketImpl::listen (jint backlog)
 {
   if (::listen (fnum, backlog) != 0)
     {
-      char msg[100];
+      char msg[80];
       char* strerr = strerror (errno);
-      sprintf (msg, "SocketImpl.listen: %.*s", 80, strerr);
+      sprintf (msg, "%.*s", 80, strerr);
       JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
     }
 }
@@ -274,9 +279,9 @@ java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *s)
   s->fd = new java::io::FileDescriptor (new_socket);
   return;
  error:
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "SocketImpl.accept: %.*s", 80, strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
 }
 
@@ -365,9 +370,9 @@ java::net::PlainSocketImpl::setOption (jint optID, java::lang::Object *value)
     }
 
  error:
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "SocketImpl.setOption: %.*s", 80, strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::net::SocketException (JvNewStringUTF (msg)));
 }
 
@@ -465,9 +470,9 @@ java::net::PlainSocketImpl::getOption (jint optID)
     }
 
  error:
-  char msg[100];
+  char msg[80];
   char* strerr = strerror (errno);
-  sprintf (msg, "SocketImpl.getOption: %.*s", 80, strerr);
+  sprintf (msg, "%.*s", 80, strerr);
   JvThrow (new java::net::SocketException (JvNewStringUTF (msg)));
 }