From f72cc9437b7592980003050c492526c660dc5b14 Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Wed, 10 Feb 2016 15:18:24 -0800 Subject: [PATCH] Frameworks/base: Fix LineBreakBufferedWriter In case of writing single character, check against the buffer length, not the maximum buffer size. Bug: 27099774 Change-Id: I83d49ea74cc3d25342ec540b654d3dc68e4e802e --- .../internal/util/LineBreakBufferedWriter.java | 2 +- .../util/LineBreakBufferedWriterTest.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/core/java/com/android/internal/util/LineBreakBufferedWriter.java b/core/java/com/android/internal/util/LineBreakBufferedWriter.java index f831e7a84d2fc..552a93f6666a8 100644 --- a/core/java/com/android/internal/util/LineBreakBufferedWriter.java +++ b/core/java/com/android/internal/util/LineBreakBufferedWriter.java @@ -96,7 +96,7 @@ public class LineBreakBufferedWriter extends PrintWriter { @Override public void write(int c) { - if (bufferIndex < bufferSize) { + if (bufferIndex < buffer.length) { buffer[bufferIndex] = (char)c; bufferIndex++; if ((char)c == '\n') { diff --git a/core/tests/coretests/src/com/android/internal/util/LineBreakBufferedWriterTest.java b/core/tests/coretests/src/com/android/internal/util/LineBreakBufferedWriterTest.java index 49ae10401983c..4845c4ef28f82 100644 --- a/core/tests/coretests/src/com/android/internal/util/LineBreakBufferedWriterTest.java +++ b/core/tests/coretests/src/com/android/internal/util/LineBreakBufferedWriterTest.java @@ -180,6 +180,22 @@ public class LineBreakBufferedWriterTest extends TestCase { assertOutput("aaaaaaaaaabbbbbc\nd", "ddddddddd"); } + public void testMoreThenInitialCapacitySimpleWrites() { + // This check is different from testMoreThanBufferSizeChar. The initial capacity is lower + // than the maximum buffer size here. + final LineBreakBufferedWriter lw = new LineBreakBufferedWriter(mWriter, 1024, 3); + + for(int i = 0; i < 10; i++) { + lw.print('$'); + } + for(int i = 0; i < 10; i++) { + lw.print('%'); + } + lw.flush(); + + assertOutput("$$$$$$$$$$%%%%%%%%%%"); + } + private void assertOutput(String... golden) { List goldList = createTestGolden(golden); assertEquals(goldList, mWriter.getStrings());