Skip to content
Permalink
Browse files

8240848: ArrayIndexOutOfBoundsException buf for TextCallbackHandler

Reviewed-by: mullan
  • Loading branch information
wangweij committed Apr 10, 2020
1 parent 592b9a9 commit 502d45955f36a22a6568af547bdecb609d0ceaf6
@@ -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 @@ private void doConfirmation(ConfirmationCallback confirmation)
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;
}
@@ -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);
}
}
}

0 comments on commit 502d459

Please sign in to comment.