changeset 60860:ed79f6aea385

8240848: ArrayIndexOutOfBoundsException buf for TextCallbackHandler Reviewed-by: mullan
author weijun
date Fri, 10 Apr 2020 15:05:42 +0800
parents 4b76f0cc11c4
children 4a39a7ad717f
files src/java.base/share/classes/sun/security/util/ConsoleCallbackHandler.java test/jdk/com/sun/security/auth/callback/TextCallbackHandler/Confirm.java
diffstat 2 files changed, 25 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/java.base/share/classes/sun/security/util/ConsoleCallbackHandler.java	Fri Apr 10 05:43:40 2020 +0000
+++ b/src/java.base/share/classes/sun/security/util/ConsoleCallbackHandler.java	Fri Apr 10 15:05:42 2020 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2020, 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
@@ -35,7 +35,6 @@
 
 import java.io.BufferedReader;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.InputStreamReader;
 
 /**
@@ -236,8 +235,9 @@
             result = Integer.parseInt(readLine());
             if (result < 0 || result > (options.length - 1)) {
                 result = defaultOption;
+            } else {
+                result = options[result].value;
             }
-            result = options[result].value;
         } catch (NumberFormatException e) {
             result = defaultOption;
         }
--- a/test/jdk/com/sun/security/auth/callback/TextCallbackHandler/Confirm.java	Fri Apr 10 05:43:40 2020 +0000
+++ b/test/jdk/com/sun/security/auth/callback/TextCallbackHandler/Confirm.java	Fri Apr 10 15:05:42 2020 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2020, 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
@@ -23,24 +23,38 @@
 
 /*
  * @test
- * @bug 6599079
+ * @bug 6599079 8240848
  * @summary Non-standard ConfirmationCallback throws NPE
+ * @modules jdk.security.auth
  */
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.ConfirmationCallback;
 import com.sun.security.auth.callback.TextCallbackHandler;
 import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 
 public class Confirm {
 
     public static void main(String[] args) throws Exception {
-        // Provide answer in an individual stream so that the program
-        // does not block.
-        System.setIn(new ByteArrayInputStream("1\n".getBytes()));
+        InputStream in = System.in;
+        try {
+            // Provide answer in an individual stream so that the program
+            // does not block.
+            System.setIn(new ByteArrayInputStream("1\n".getBytes()));
+            new TextCallbackHandler().handle(new Callback[]{
+                    new ConfirmationCallback("Prince",
+                            ConfirmationCallback.INFORMATION,
+                            new String[]{"To be", "Not to be"}, 0)});
 
-        new TextCallbackHandler().handle(new Callback[]{
-            new ConfirmationCallback("Prince", ConfirmationCallback.INFORMATION,
-                    new String[]{"To be", "Not to be"}, 0)});
+            System.setIn(new ByteArrayInputStream("-1\n".getBytes()));
+            new TextCallbackHandler().handle(new Callback[]{
+                    new ConfirmationCallback(
+                            ConfirmationCallback.INFORMATION,
+                            ConfirmationCallback.OK_CANCEL_OPTION,
+                            ConfirmationCallback.OK)});
+        } finally {
+            System.setIn(in);
+        }
     }
 }