Make isHostRoute match only host routes

Currently, isHostRoute returns true iff the gateway address is
the unspecified address (0.0.0.0 or ::). Thus, it will return
true for any route that has no gateway (e.g., a route pointing at
a point-to-point interface), even if the route is not a host
route.

Fix this by checking the prefix length instead. This should be
safe because:

1. mDestination cannot be null, since it's created using new.
2. Host routes created using makeHostRoute (which is what
   ConnectivityService calls) always have the correct prefix
   lengths (/32 or /128) set.

Bug: 8276725
Change-Id: I14285398823fa6c312349128c7cc216cad4a84c9
This commit is contained in:
Lorenzo Colitti 2013-03-27 13:07:18 +09:00
commit aff5413507

View file

@ -132,7 +132,10 @@ public class RouteInfo implements Parcelable {
}
private boolean isHost() {
return (mGateway.equals(Inet4Address.ANY) || mGateway.equals(Inet6Address.ANY));
return (mDestination.getAddress() instanceof Inet4Address &&
mDestination.getNetworkPrefixLength() == 32) ||
(mDestination.getAddress() instanceof Inet6Address &&
mDestination.getNetworkPrefixLength() == 128);
}
private boolean isDefault() {