Skip to content

Commit

Permalink
8320798: Console read line with zero out should zero out underlying b…
Browse files Browse the repository at this point in the history
…uffer

Backport-of: d568562966e9a2020704eee3d67b8a106f647d9c
  • Loading branch information
GoeLin committed Dec 14, 2023
1 parent d65289d commit e8cf56c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
10 changes: 9 additions & 1 deletion src/java.base/share/classes/jdk/internal/io/JdkConsoleImpl.java
@@ -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
Expand Down Expand Up @@ -195,6 +195,9 @@ else if (rcb[len-1] == '\n') {
System.arraycopy(rcb, 0, b, 0, len);
if (zeroOut) {
Arrays.fill(rcb, 0, len, ' ');
if (reader instanceof LineReader lr) {
lr.zeroOut();
}
}
}
return b;
Expand Down Expand Up @@ -228,6 +231,11 @@ class LineReader extends Reader {
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
Expand Down
21 changes: 21 additions & 0 deletions src/java.base/share/classes/sun/nio/cs/StreamDecoder.java
Expand Up @@ -42,6 +42,8 @@
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 {
Expand Down Expand Up @@ -271,6 +273,25 @@ private boolean isOpen() {
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 --

Expand Down

1 comment on commit e8cf56c

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.