From bb2611ad43a2feaebc2246fdbac2179a40115d67 Mon Sep 17 00:00:00 2001 From: Volkan Yazici Date: Fri, 6 Jun 2025 06:53:10 +0000 Subject: [PATCH] 8357993: Use "stdin.encoding" for reading System.in with InputStreamReader/Scanner [hotspot] Reviewed-by: cjplummer, sspitsyn --- .../share/classes/sun/jvm/hotspot/CLHSDB.java | 7 ++++--- .../classes/jdk/jfr/internal/jfc/model/UserInterface.java | 6 ++++-- .../jvmti/AttachOnDemand/attach010/attach010Agent00.java | 5 +++-- .../jtreg/vmTestbase/nsk/share/jpda/BindServer.java | 4 ++-- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/CLHSDB.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/CLHSDB.java index 3ed34ef1ae9..565d9e83329 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/CLHSDB.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/CLHSDB.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2025, 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 @@ -28,6 +28,7 @@ import sun.jvm.hotspot.*; import sun.jvm.hotspot.debugger.*; import java.io.*; +import java.nio.charset.Charset; import java.util.*; public class CLHSDB { @@ -106,8 +107,8 @@ public class CLHSDB { }; - BufferedReader in = - new BufferedReader(new InputStreamReader(System.in)); + Charset charset = Charset.forName(System.getProperty("stdin.encoding"), Charset.defaultCharset()); + BufferedReader in = new BufferedReader(new InputStreamReader(System.in, charset)); CommandProcessor cp = new CommandProcessor(di, in, System.out, System.err); cp.run(true); diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/jfc/model/UserInterface.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/jfc/model/UserInterface.java index 7d9fc2478ba..f397fc4ec7d 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/jfc/model/UserInterface.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/jfc/model/UserInterface.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, 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 @@ -27,6 +27,7 @@ package jdk.jfr.internal.jfc.model; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.nio.charset.Charset; public final class UserInterface { @@ -40,7 +41,8 @@ public final class UserInterface { public String readLine() throws AbortException { try { - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + Charset charset = Charset.forName(System.getProperty("stdin.encoding"), Charset.defaultCharset()); + BufferedReader br = new BufferedReader(new InputStreamReader(System.in, charset)); String line = br.readLine(); if (line == null || line.equalsIgnoreCase("Q")) { println(); diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach010/attach010Agent00.java b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach010/attach010Agent00.java index 877c1e3862e..1e0abf4e11e 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach010/attach010Agent00.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach010/attach010Agent00.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2025, 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 @@ -60,7 +60,8 @@ public class attach010Agent00 extends AbstractJarAgent { FileInputStream newInputStream = new FileInputStream(inStreamFileName); System.setIn(newInputStream); - BufferedReader inputStreamReader = new BufferedReader(new InputStreamReader(System.in)); + BufferedReader inputStreamReader = new BufferedReader(new InputStreamReader( + System.in, System.getProperty("stdin.encoding"))); int readValue = Integer.parseInt(inputStreamReader.readLine()); if (readValue != valueToWrite) { diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/BindServer.java b/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/BindServer.java index 2ed334e0386..58a7ca2a703 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/BindServer.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/BindServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2025, 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 @@ -173,7 +173,7 @@ public final class BindServer { } BufferedReader stdIn = new BufferedReader( - new InputStreamReader(System.in)); + new InputStreamReader(System.in, System.getProperty("stdin.encoding"))); try (ListeningThread listeningThread = new ListeningThread(this)) { listeningThread.bind(); listeningThread.start();