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

Commit 1f9dcd33 authored by Jooyung Han's avatar Jooyung Han
Browse files

binder_ndk: sanitize binder descriptor for logging

Invalid char in a string causes "implicit-conversion" ubsan error.
So, when printing "read" binder descriptor for log, sanitize it by
replacing invalid char with '?'.

Bug: n/a
Test: binder_parcel_fuzzer
Change-Id: I51f806ff28ccc52f9b3da328ace4ca8c348483ba
parent 3b31ccac
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -104,6 +104,17 @@ std::optional<bool> AIBinder::associateClassInternal(const AIBinder_Class* clazz
    return {};
}

// b/175635923 libcxx causes "implicit-conversion" with a string with invalid char
static std::string SanitizeString(const String16& str) {
    std::string sanitized{String8(str)};
    for (auto& c : sanitized) {
        if (!isprint(c)) {
            c = '?';
        }
    }
    return sanitized;
}

bool AIBinder::associateClass(const AIBinder_Class* clazz) {
    if (clazz == nullptr) return false;

@@ -118,7 +129,7 @@ bool AIBinder::associateClass(const AIBinder_Class* clazz) {
    if (descriptor != newDescriptor) {
        if (getBinder()->isBinderAlive()) {
            LOG(ERROR) << __func__ << ": Expecting binder to have class '" << newDescriptor
                       << "' but descriptor is actually '" << descriptor << "'.";
                       << "' but descriptor is actually '" << SanitizeString(descriptor) << "'.";
        } else {
            // b/155793159
            LOG(ERROR) << __func__ << ": Cannot associate class '" << newDescriptor