Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f72cc943 authored by Andreas Gampe's avatar Andreas Gampe
Browse files

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
parent f61a8478
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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') {
+16 −0
Original line number Diff line number Diff line
@@ -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<String> goldList = createTestGolden(golden);
        assertEquals(goldList, mWriter.getStrings());