Commit 429d7c74 by Bryce McKinlay Committed by Bryce McKinlay

re GNATS java.net/57 (potential buffer overruns)

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
parent a166668a
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> 1999-11-19 Tom Tromey <tromey@cygnus.com>
* Makefile.am (DIVIDESPEC): Removed. * Makefile.am (DIVIDESPEC): Removed.
......
...@@ -152,9 +152,9 @@ java::net::PlainDatagramSocketImpl::create () ...@@ -152,9 +152,9 @@ java::net::PlainDatagramSocketImpl::create ()
int sock = ::socket (AF_INET, SOCK_DGRAM, 0); int sock = ::socket (AF_INET, SOCK_DGRAM, 0);
if (sock < 0) if (sock < 0)
{ {
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "DatagramSocketImpl.create: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::net::SocketException (JvNewStringUTF (msg))); JvThrow (new java::net::SocketException (JvNewStringUTF (msg)));
} }
fnum = sock; fnum = sock;
...@@ -206,9 +206,9 @@ java::net::PlainDatagramSocketImpl::bind (jint lport, ...@@ -206,9 +206,9 @@ java::net::PlainDatagramSocketImpl::bind (jint lport,
return; return;
} }
error: error:
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "DatagramSocketImpl.bind: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::net::BindException (JvNewStringUTF (msg))); JvThrow (new java::net::BindException (JvNewStringUTF (msg)));
} }
...@@ -246,9 +246,9 @@ java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *i) ...@@ -246,9 +246,9 @@ java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *i)
i->address = raddr; i->address = raddr;
return rport; return rport;
error: error:
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "DatagramSocketImpl.peek: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::io::IOException (JvNewStringUTF (msg))); JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
} }
...@@ -284,9 +284,9 @@ java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *p) ...@@ -284,9 +284,9 @@ java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *p)
if (::sendto (fnum, (char *) dbytes, p->getLength(), 0, ptr, len) >= 0) if (::sendto (fnum, (char *) dbytes, p->getLength(), 0, ptr, len) >= 0)
return; return;
error: error:
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "DatagramSocketImpl.send: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::io::IOException (JvNewStringUTF (msg))); JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
} }
...@@ -344,9 +344,9 @@ java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p) ...@@ -344,9 +344,9 @@ java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p)
p->setLength ((jint) retlen); p->setLength ((jint) retlen);
return; return;
error: error:
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "DatagramSocketImpl.receive: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::io::IOException (JvNewStringUTF (msg))); JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
} }
...@@ -359,9 +359,9 @@ java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl) ...@@ -359,9 +359,9 @@ java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl)
if (::setsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, val_len) == 0) if (::setsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, val_len) == 0)
return; return;
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "DatagramSocketImpl.setTimeToLive: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::io::IOException (JvNewStringUTF (msg))); JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
} }
...@@ -374,9 +374,9 @@ java::net::PlainDatagramSocketImpl::getTimeToLive () ...@@ -374,9 +374,9 @@ java::net::PlainDatagramSocketImpl::getTimeToLive ()
if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, &val_len) == 0) if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, &val_len) == 0)
return ((int) val) & 0xFF; return ((int) val) & 0xFF;
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "DatagramSocketImpl.getTimeToLive: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::io::IOException (JvNewStringUTF (msg))); JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
} }
...@@ -423,10 +423,9 @@ java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *inetaddr, ...@@ -423,10 +423,9 @@ java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *inetaddr,
if (::setsockopt (fnum, level, opname, ptr, len) == 0) if (::setsockopt (fnum, level, opname, ptr, len) == 0)
return; return;
error: error:
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "DatagramSocketImpl.%s: %.*s", join ? "join" : "leave", 80, sprintf (msg, "%.*s", 80, strerr);
strerr);
JvThrow (new java::io::IOException (JvNewStringUTF (msg))); JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
} }
...@@ -531,9 +530,9 @@ java::net::PlainDatagramSocketImpl::setOption (jint optID, ...@@ -531,9 +530,9 @@ java::net::PlainDatagramSocketImpl::setOption (jint optID,
} }
error: error:
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "DatagramSocketImpl.setOption: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::net::SocketException (JvNewStringUTF (msg))); JvThrow (new java::net::SocketException (JvNewStringUTF (msg)));
} }
...@@ -633,9 +632,9 @@ java::net::PlainDatagramSocketImpl::getOption (jint optID) ...@@ -633,9 +632,9 @@ java::net::PlainDatagramSocketImpl::getOption (jint optID)
} }
error: error:
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "DatagramSocketImpl.getOption: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::net::SocketException (JvNewStringUTF (msg))); JvThrow (new java::net::SocketException (JvNewStringUTF (msg)));
} }
......
...@@ -84,7 +84,7 @@ java::net::PlainSocketImpl::setOption (jint, java::lang::Object *) ...@@ -84,7 +84,7 @@ java::net::PlainSocketImpl::setOption (jint, java::lang::Object *)
java::lang::Object * java::lang::Object *
java::net::PlainSocketImpl::getOption (jint) java::net::PlainSocketImpl::getOption (jint)
{ {
JvThrow (new SocketException (JvNewStringLatin1 ("SocketImpl.create: unimplemented"))); JvThrow (new SocketException (JvNewStringLatin1 ("SocketImpl.getOption: unimplemented")));
} }
#else /* DISABLE_JAVA_NET */ #else /* DISABLE_JAVA_NET */
...@@ -124,6 +124,7 @@ java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport) ...@@ -124,6 +124,7 @@ java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport)
jbyteArray haddress = host->address; jbyteArray haddress = host->address;
jbyte *bytes = elements (haddress); jbyte *bytes = elements (haddress);
int len = haddress->length; int len = haddress->length;
int i = 1;
if (len == 4) if (len == 4)
{ {
...@@ -146,6 +147,10 @@ java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport) ...@@ -146,6 +147,10 @@ java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport)
#endif #endif
else else
goto error; 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) if (::bind (fnum, ptr, len) == 0)
{ {
address = host; address = host;
...@@ -159,9 +164,9 @@ java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport) ...@@ -159,9 +164,9 @@ java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport)
return; return;
} }
error: error:
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "SocketImpl.bind: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::net::BindException (JvNewStringUTF (msg))); JvThrow (new java::net::BindException (JvNewStringUTF (msg)));
} }
...@@ -204,9 +209,9 @@ java::net::PlainSocketImpl::connect (java::net::InetAddress *host, jint rport) ...@@ -204,9 +209,9 @@ java::net::PlainSocketImpl::connect (java::net::InetAddress *host, jint rport)
goto error; goto error;
return; return;
error: error:
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "SocketImpl.connect: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::net::ConnectException (JvNewStringUTF (msg))); JvThrow (new java::net::ConnectException (JvNewStringUTF (msg)));
} }
...@@ -215,9 +220,9 @@ java::net::PlainSocketImpl::listen (jint backlog) ...@@ -215,9 +220,9 @@ java::net::PlainSocketImpl::listen (jint backlog)
{ {
if (::listen (fnum, backlog) != 0) if (::listen (fnum, backlog) != 0)
{ {
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "SocketImpl.listen: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::io::IOException (JvNewStringUTF (msg))); JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
} }
} }
...@@ -274,9 +279,9 @@ java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *s) ...@@ -274,9 +279,9 @@ java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *s)
s->fd = new java::io::FileDescriptor (new_socket); s->fd = new java::io::FileDescriptor (new_socket);
return; return;
error: error:
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "SocketImpl.accept: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::io::IOException (JvNewStringUTF (msg))); JvThrow (new java::io::IOException (JvNewStringUTF (msg)));
} }
...@@ -365,9 +370,9 @@ java::net::PlainSocketImpl::setOption (jint optID, java::lang::Object *value) ...@@ -365,9 +370,9 @@ java::net::PlainSocketImpl::setOption (jint optID, java::lang::Object *value)
} }
error: error:
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "SocketImpl.setOption: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::net::SocketException (JvNewStringUTF (msg))); JvThrow (new java::net::SocketException (JvNewStringUTF (msg)));
} }
...@@ -465,9 +470,9 @@ java::net::PlainSocketImpl::getOption (jint optID) ...@@ -465,9 +470,9 @@ java::net::PlainSocketImpl::getOption (jint optID)
} }
error: error:
char msg[100]; char msg[80];
char* strerr = strerror (errno); char* strerr = strerror (errno);
sprintf (msg, "SocketImpl.getOption: %.*s", 80, strerr); sprintf (msg, "%.*s", 80, strerr);
JvThrow (new java::net::SocketException (JvNewStringUTF (msg))); JvThrow (new java::net::SocketException (JvNewStringUTF (msg)));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment