mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8320798: Console read line with zero out should zero out underlying buffer
Reviewed-by: bpb, lancea, joehw, alanb, jpai, mbaesken
This commit is contained in:
parent
3087e14cde
commit
d568562966
2 changed files with 30 additions and 1 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2022, 2023, 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
|
||||
|
@ -195,6 +195,9 @@ public final class JdkConsoleImpl implements JdkConsole {
|
|||
System.arraycopy(rcb, 0, b, 0, len);
|
||||
if (zeroOut) {
|
||||
Arrays.fill(rcb, 0, len, ' ');
|
||||
if (reader instanceof LineReader lr) {
|
||||
lr.zeroOut();
|
||||
}
|
||||
}
|
||||
}
|
||||
return b;
|
||||
|
@ -228,6 +231,11 @@ public final class JdkConsoleImpl implements JdkConsole {
|
|||
nextChar = nChars = 0;
|
||||
leftoverLF = false;
|
||||
}
|
||||
public void zeroOut() throws IOException {
|
||||
if (in instanceof StreamDecoder sd) {
|
||||
sd.fillZeroToPosition();
|
||||
}
|
||||
}
|
||||
public void close () {}
|
||||
public boolean ready() throws IOException {
|
||||
//in.ready synchronizes on readLock already
|
||||
|
|
|
@ -42,6 +42,8 @@ import java.nio.charset.CoderResult;
|
|||
import java.nio.charset.CodingErrorAction;
|
||||
import java.nio.charset.IllegalCharsetNameException;
|
||||
import java.nio.charset.UnsupportedCharsetException;
|
||||
import java.util.Arrays;
|
||||
|
||||
import jdk.internal.misc.InternalLock;
|
||||
|
||||
public class StreamDecoder extends Reader {
|
||||
|
@ -271,6 +273,25 @@ public class StreamDecoder extends Reader {
|
|||
return !closed;
|
||||
}
|
||||
|
||||
public void fillZeroToPosition() throws IOException {
|
||||
Object lock = this.lock;
|
||||
if (lock instanceof InternalLock locker) {
|
||||
locker.lock();
|
||||
try {
|
||||
lockedFillZeroToPosition();
|
||||
} finally {
|
||||
locker.unlock();
|
||||
}
|
||||
} else {
|
||||
synchronized (lock) {
|
||||
lockedFillZeroToPosition();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void lockedFillZeroToPosition() {
|
||||
Arrays.fill(bb.array(), bb.arrayOffset(), bb.arrayOffset() + bb.position(), (byte)0);
|
||||
}
|
||||
|
||||
// -- Charset-based stream decoder impl --
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue