mirror of
https://github.com/openjdk/jdk8u.git
synced 2025-12-10 21:05:56 -06:00
8340552: Harden TzdbZoneRulesCompiler against missing zone names
Reviewed-by: serb Backport-of: 1bc13a1c10a580f84f1b7686c95344ec2633f611
This commit is contained in:
parent
898e1312ba
commit
24cade612f
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -248,7 +248,7 @@ public final class TzdbZoneRulesCompiler {
|
||||
// link version-region-rules
|
||||
out.writeShort(builtZones.size());
|
||||
for (Map.Entry<String, ZoneRules> entry : builtZones.entrySet()) {
|
||||
int regionIndex = Arrays.binarySearch(regionArray, entry.getKey());
|
||||
int regionIndex = findRegionIndex(regionArray, entry.getKey());
|
||||
int rulesIndex = rulesList.indexOf(entry.getValue());
|
||||
out.writeShort(regionIndex);
|
||||
out.writeShort(rulesIndex);
|
||||
@ -256,8 +256,8 @@ public final class TzdbZoneRulesCompiler {
|
||||
// alias-region
|
||||
out.writeShort(links.size());
|
||||
for (Map.Entry<String, String> entry : links.entrySet()) {
|
||||
int aliasIndex = Arrays.binarySearch(regionArray, entry.getKey());
|
||||
int regionIndex = Arrays.binarySearch(regionArray, entry.getValue());
|
||||
int aliasIndex = findRegionIndex(regionArray, entry.getKey());
|
||||
int regionIndex = findRegionIndex(regionArray, entry.getValue());
|
||||
out.writeShort(aliasIndex);
|
||||
out.writeShort(regionIndex);
|
||||
}
|
||||
@ -284,6 +284,14 @@ public final class TzdbZoneRulesCompiler {
|
||||
/** The built zones. */
|
||||
private final SortedMap<String, ZoneRules> builtZones = new TreeMap<>();
|
||||
|
||||
private static int findRegionIndex(String[] regionArray, String region) {
|
||||
int index = Arrays.binarySearch(regionArray, region);
|
||||
if (index < 0) {
|
||||
throw new IllegalArgumentException("Unknown region: " + region);
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
/** Whether to output verbose messages. */
|
||||
private boolean verbose;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user