7146776: deadlock between URLStreamHandler.getHostAddress and file.Handler.openconnection
Reviewed-by: alanb, chegar
This commit is contained in:
parent
61292be755
commit
db9c114d40
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1995, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -249,7 +249,7 @@ public final class URL implements java.io.Serializable {
|
|||||||
* The host's IP address, used in equals and hashCode.
|
* The host's IP address, used in equals and hashCode.
|
||||||
* Computed on demand. An uninitialized or unknown hostAddress is null.
|
* Computed on demand. An uninitialized or unknown hostAddress is null.
|
||||||
*/
|
*/
|
||||||
transient InetAddress hostAddress;
|
private transient InetAddress hostAddress;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The URLStreamHandler for this URL.
|
* The URLStreamHandler for this URL.
|
||||||
@ -809,6 +809,31 @@ public final class URL implements java.io.Serializable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the address of the host represented by this URL.
|
||||||
|
* A {@link SecurityException} or an {@link UnknownHostException}
|
||||||
|
* while getting the host address will result in this method returning
|
||||||
|
* {@code null}
|
||||||
|
*
|
||||||
|
* @return an {@link InetAddress} representing the host
|
||||||
|
*/
|
||||||
|
synchronized InetAddress getHostAddress() {
|
||||||
|
if (hostAddress != null) {
|
||||||
|
return hostAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (host == null || host.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
hostAddress = InetAddress.getByName(host);
|
||||||
|
} catch (UnknownHostException | SecurityException ex) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return hostAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the query part of this {@code URL}.
|
* Gets the query part of this {@code URL}.
|
||||||
*
|
*
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1995, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -443,23 +443,8 @@ public abstract class URLStreamHandler {
|
|||||||
* IP address.
|
* IP address.
|
||||||
* @since 1.3
|
* @since 1.3
|
||||||
*/
|
*/
|
||||||
protected synchronized InetAddress getHostAddress(URL u) {
|
protected InetAddress getHostAddress(URL u) {
|
||||||
if (u.hostAddress != null)
|
return u.getHostAddress();
|
||||||
return u.hostAddress;
|
|
||||||
|
|
||||||
String host = u.getHost();
|
|
||||||
if (host == null || host.isEmpty()) {
|
|
||||||
return null;
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
u.hostAddress = InetAddress.getByName(host);
|
|
||||||
} catch (UnknownHostException ex) {
|
|
||||||
return null;
|
|
||||||
} catch (SecurityException se) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return u.hostAddress;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user