From bd04f91e9103ee04f643f8d04553705c4d78fda3 Mon Sep 17 00:00:00 2001 From: Naoto Sato Date: Mon, 4 Dec 2023 19:12:25 +0000 Subject: [PATCH] 8321131: Console read line with zero out should zero out underlying buffer in JLine Reviewed-by: iris, alanb, jlahoda --- .../jdk/internal/org/jline/JdkConsoleProviderImpl.java | 8 +++++--- .../classes/jdk/internal/org/jline/reader/Buffer.java | 4 ++++ .../jdk/internal/org/jline/reader/impl/BufferImpl.java | 7 +++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/jdk.internal.le/share/classes/jdk/internal/org/jline/JdkConsoleProviderImpl.java b/src/jdk.internal.le/share/classes/jdk/internal/org/jline/JdkConsoleProviderImpl.java index 2a2a24d26b4..81ff4ae3077 100644 --- a/src/jdk.internal.le/share/classes/jdk/internal/org/jline/JdkConsoleProviderImpl.java +++ b/src/jdk.internal.le/share/classes/jdk/internal/org/jline/JdkConsoleProviderImpl.java @@ -67,6 +67,9 @@ public class JdkConsoleProviderImpl implements JdkConsoleProvider { * public Console class. */ private static class JdkConsoleImpl implements JdkConsole { + private final Terminal terminal; + private volatile LineReader jline; + @Override public PrintWriter writer() { return terminal.writer(); @@ -110,6 +113,8 @@ public class JdkConsoleProviderImpl implements JdkConsoleProvider { return jline.readLine(fmt.formatted(args), '\0').toCharArray(); } catch (EndOfFileException eofe) { return null; + } finally { + jline.getBuffer().zeroOut(); } } @@ -128,9 +133,6 @@ public class JdkConsoleProviderImpl implements JdkConsoleProvider { return terminal.encoding(); } - private final Terminal terminal; - private volatile LineReader jline; - public JdkConsoleImpl(Terminal terminal) { this.terminal = terminal; } diff --git a/src/jdk.internal.le/share/classes/jdk/internal/org/jline/reader/Buffer.java b/src/jdk.internal.le/share/classes/jdk/internal/org/jline/reader/Buffer.java index 9fdd6e0bd7e..c47746f566c 100644 --- a/src/jdk.internal.le/share/classes/jdk/internal/org/jline/reader/Buffer.java +++ b/src/jdk.internal.le/share/classes/jdk/internal/org/jline/reader/Buffer.java @@ -84,4 +84,8 @@ public interface Buffer { void copyFrom(Buffer buffer); + // JDK specific modification + default void zeroOut() { + throw new UnsupportedOperationException(); + } } diff --git a/src/jdk.internal.le/share/classes/jdk/internal/org/jline/reader/impl/BufferImpl.java b/src/jdk.internal.le/share/classes/jdk/internal/org/jline/reader/impl/BufferImpl.java index a3b2a21ac66..d0c4c2cb7ae 100644 --- a/src/jdk.internal.le/share/classes/jdk/internal/org/jline/reader/impl/BufferImpl.java +++ b/src/jdk.internal.le/share/classes/jdk/internal/org/jline/reader/impl/BufferImpl.java @@ -8,6 +8,7 @@ */ package jdk.internal.org.jline.reader.impl; +import java.util.Arrays; import java.util.Objects; import jdk.internal.org.jline.reader.Buffer; @@ -369,4 +370,10 @@ public class BufferImpl implements Buffer g1 += l; } } + + // JDK specific modification + @Override + public void zeroOut() { + Arrays.fill(buffer, 0); + } }