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

Commit 065b6513 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix a bug in RuleIndexingController where StackOverflowError occurs" into sc-dev

parents 6001ff0c d1df8f4d
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -92,6 +92,9 @@ public class RuleIndexingController {
                break;
            }
        }
        if (keyToIndexMap.size() < 2) {
            throw new IllegalStateException("Indexing file is corrupt.");
        }
        return keyToIndexMap;
    }

@@ -106,6 +109,9 @@ public class RuleIndexingController {

    private static List<String> searchKeysRangeContainingKey(
            List<String> sortedKeyList, String key, int startIndex, int endIndex) {
        if (endIndex <= startIndex) {
            throw new IllegalStateException("Indexing file is corrupt.");
        }
        if (endIndex - startIndex == 1) {
            return Arrays.asList(sortedKeyList.get(startIndex), sortedKeyList.get(endIndex));
        }
+18 −0
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import static com.android.server.integrity.utils.TestUtils.getValueBits;

import static com.google.common.truth.Truth.assertThat;

import static org.testng.Assert.assertThrows;

import android.content.integrity.AppInstallMetadata;

import org.junit.Test;
@@ -163,6 +165,22 @@ public class RuleIndexingControllerTest {
                        new RuleIndexRange(900, 945));
    }

    @Test
    public void verifyIndexingFileIsCorrupt() throws IOException {
        byte[] stringBytes =
                getBytes(
                        getKeyValueString(START_INDEXING_KEY, 100)
                                + getKeyValueString("ccc", 200)
                                + getKeyValueString(END_INDEXING_KEY, 300)
                                + getKeyValueString(END_INDEXING_KEY, 900));
        ByteBuffer rule = ByteBuffer.allocate(stringBytes.length);
        rule.put(stringBytes);
        InputStream inputStream = new ByteArrayInputStream(rule.array());

        assertThrows(IllegalStateException.class,
                () -> new RuleIndexingController(inputStream));
    }

    private static InputStream obtainDefaultIndexingMapForTest() {
        byte[] stringBytes =
                getBytes(