summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>1999-11-23 11:40:26 +0000
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>1999-11-23 11:40:26 +0000
commit65e35607faea7d533a4d39aec4c4b1facea0427d (patch)
tree27127c34a727db5fad0f96ccea9ba47cc02fe95d /libjava
parent9185b6099cd33bda221571a04189fa1a177b1801 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--libjava/java/net/natPlainDatagramSocketImpl.cc41
-rw-r--r--libjava/java/net/natPlainSocketImpl.cc31
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)));
}