diff options
author | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-11-23 11:40:26 +0000 |
---|---|---|
committer | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-11-23 11:40:26 +0000 |
commit | 65e35607faea7d533a4d39aec4c4b1facea0427d (patch) | |
tree | 27127c34a727db5fad0f96ccea9ba47cc02fe95d /libjava | |
parent | 9185b6099cd33bda221571a04189fa1a177b1801 (diff) | |
download | gcc-65e35607faea7d533a4d39aec4c4b1facea0427d.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@30637 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 8 | ||||
-rw-r--r-- | libjava/java/net/natPlainDatagramSocketImpl.cc | 41 | ||||
-rw-r--r-- | libjava/java/net/natPlainSocketImpl.cc | 31 |
3 files changed, 46 insertions, 34 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 0fbce0840f4..586d1213833 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -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. diff --git a/libjava/java/net/natPlainDatagramSocketImpl.cc b/libjava/java/net/natPlainDatagramSocketImpl.cc index 6ff9ca09883..472faafcf1d 100644 --- a/libjava/java/net/natPlainDatagramSocketImpl.cc +++ b/libjava/java/net/natPlainDatagramSocketImpl.cc @@ -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))); } diff --git a/libjava/java/net/natPlainSocketImpl.cc b/libjava/java/net/natPlainSocketImpl.cc index 62dafd32cdd..732eb36155f 100644 --- a/libjava/java/net/natPlainSocketImpl.cc +++ b/libjava/java/net/natPlainSocketImpl.cc @@ -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))); } |