From 2875dda7ded7940ad8505289e6dd61d19fba8f07 Mon Sep 17 00:00:00 2001 From: chegar Date: Fri, 31 Jan 2014 18:32:07 +0000 Subject: [PATCH] 8011645: CopyOnWriteArrayList.COWSubList.subList does not validate range properly Reviewed-by: martin, psandoz --- .../util/concurrent/CopyOnWriteArrayList.java | 2 +- .../CopyOnWriteArrayList/COWSubList.java | 58 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 test/java/util/concurrent/CopyOnWriteArrayList/COWSubList.java diff --git a/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java b/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java index fae67b2b2..162ad3b51 100644 --- a/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java +++ b/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java @@ -1400,7 +1400,7 @@ public class CopyOnWriteArrayList lock.lock(); try { checkForComodification(); - if (fromIndex < 0 || toIndex > size) + if (fromIndex < 0 || toIndex > size || fromIndex > toIndex) throw new IndexOutOfBoundsException(); return new COWSubList(l, fromIndex + offset, toIndex + offset); diff --git a/test/java/util/concurrent/CopyOnWriteArrayList/COWSubList.java b/test/java/util/concurrent/CopyOnWriteArrayList/COWSubList.java new file mode 100644 index 000000000..5cbfea7ec --- /dev/null +++ b/test/java/util/concurrent/CopyOnWriteArrayList/COWSubList.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2014, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8011645 + * @summary CopyOnWriteArrayList.COWSubList.subList does not validate range properly + */ +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +public class COWSubList { + public static void main(String[] args) { + List list = new CopyOnWriteArrayList<>(); + list.add("A"); + list.add("B"); + list.add("C"); + list.add("D"); + list.add("E"); + + expectThrow(() -> list.subList(-1, 5)); + expectThrow(() -> list.subList(0, 6)); + expectThrow(() -> list.subList(4, 3)); + expectThrow(() -> list.subList(0, 5).subList(-1, 5)); + expectThrow(() -> list.subList(0, 5).subList(0, 6)); + expectThrow(() -> list.subList(0, 5).subList(4, 3)); + } + + static void expectThrow(Runnable r) { + try { + r.run(); + throw new RuntimeException("Failed: expected IOOBE to be thrown"); + } catch (IndexOutOfBoundsException x) { + // ok, excpeted + } + } +} + -- GitLab