7076310: (file) AclEntry.Builder setFlags throws IllegalArgumentException if set argument is empty
authoralanb
Thu, 22 Dec 2011 10:52:17 +0000
changeset 11358 8821bb789678
parent 11357 0ef20e50a018
child 11359 9e53808b2128
7076310: (file) AclEntry.Builder setFlags throws IllegalArgumentException if set argument is empty Reviewed-by: alanb Contributed-by: stephen.flores@oracle.com
jdk/src/share/classes/java/nio/file/attribute/AclEntry.java
jdk/test/java/nio/file/attribute/AclEntry/EmptySet.java
--- a/jdk/src/share/classes/java/nio/file/attribute/AclEntry.java	Thu Dec 22 15:35:55 2011 +0800
+++ b/jdk/src/share/classes/java/nio/file/attribute/AclEntry.java	Thu Dec 22 10:52:17 2011 +0000
@@ -175,9 +175,15 @@
          *          AclEntryPermission}
          */
         public Builder setPermissions(Set<AclEntryPermission> perms) {
-            // copy and check for erroneous elements
-            perms = EnumSet.copyOf(perms);
-            checkSet(perms, AclEntryPermission.class);
+            if (perms.isEmpty()) {
+                // EnumSet.copyOf does not allow empty set
+                perms = Collections.emptySet();
+            } else {
+                // copy and check for erroneous elements
+                perms = EnumSet.copyOf(perms);
+                checkSet(perms, AclEntryPermission.class);
+            }
+
             this.perms = perms;
             return this;
         }
@@ -212,9 +218,15 @@
          *          AclEntryFlag}
          */
         public Builder setFlags(Set<AclEntryFlag> flags) {
-            // copy and check for erroneous elements
-            flags = EnumSet.copyOf(flags);
-            checkSet(flags, AclEntryFlag.class);
+            if (flags.isEmpty()) {
+                // EnumSet.copyOf does not allow empty set
+                flags = Collections.emptySet();
+            } else {
+                // copy and check for erroneous elements
+                flags = EnumSet.copyOf(flags);
+                checkSet(flags, AclEntryFlag.class);
+            }
+
             this.flags = flags;
             return this;
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/file/attribute/AclEntry/EmptySet.java	Thu Dec 22 10:52:17 2011 +0000
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2011, 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 7076310
+ * @summary Test AclEntry.Builder setFlags and setPermissions with empty sets
+ */
+
+import java.nio.file.attribute.*;
+import java.util.*;
+
+/*
+ * Test for bug 7076310 "(file) AclEntry.Builder setFlags throws
+ * IllegalArgumentException if set argument is empty"
+ * The bug is only applies when the given Set is NOT an instance of EnumSet.
+ *
+ * The setPermissions method also has the same problem.
+ */
+public class EmptySet {
+    public static void main(String[] args) {
+        Set<AclEntryFlag> flags = new HashSet<>();
+        AclEntry.newBuilder().setFlags(flags);
+
+        Set<AclEntryPermission> perms = new HashSet<>();
+        AclEntry.newBuilder().setPermissions(perms);
+    }
+}