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

Commit 8f39fa0d authored by Steven Moreland's avatar Steven Moreland
Browse files

libbinder: binderParcelTest: read string needs \0

Test of defensive behavior recently added in libbinder.

Bug: 172655291
Test: atest binderParcelTest
Change-Id: I72ccc98d9e99ae4005219eeb61b4d07eb9c1f460
parent 51e02b16
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -25,6 +25,40 @@ using android::String16;
using android::String8;
using android::status_t;

TEST(Parcel, NonNullTerminatedString8) {
    String8 kTestString = String8("test-is-good");

    // write non-null terminated string
    Parcel p;
    p.writeString8(kTestString);
    p.setDataPosition(0);
    // BAD! assumption of wire format for test
    // write over length of string
    p.writeInt32(kTestString.size() - 2);

    p.setDataPosition(0);
    String8 output;
    EXPECT_NE(OK, p.readString8(&output));
    EXPECT_EQ(output.size(), 0);
}

TEST(Parcel, NonNullTerminatedString16) {
    String16 kTestString = String16("test-is-good");

    // write non-null terminated string
    Parcel p;
    p.writeString16(kTestString);
    p.setDataPosition(0);
    // BAD! assumption of wire format for test
    // write over length of string
    p.writeInt32(kTestString.size() - 2);

    p.setDataPosition(0);
    String16 output;
    EXPECT_NE(OK, p.readString16(&output));
    EXPECT_EQ(output.size(), 0);
}

// Tests a second operation results in a parcel at the same location as it
// started.
void parcelOpSameLength(const std::function<void(Parcel*)>& a, const std::function<void(Parcel*)>& b) {