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

Commit 80fff999 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk Committed by Gerrit Code Review
Browse files

Merge "Copy HexString to libbinder" into main

parents 163fec26 891f6b06
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@
#include <thread>
#include <vector>

#include <android-base/hex.h>
#include <android-base/scopeguard.h>
#include <binder/Parcel.h>
#include <binder/RpcServer.h>
@@ -484,7 +483,7 @@ void RpcServer::establishConnection(
                // don't block if there is some entropy issue
                if (tries++ > 5) {
                    ALOGE("Cannot find new address: %s",
                          base::HexString(sessionId.data(), sessionId.size()).c_str());
                          HexString(sessionId.data(), sessionId.size()).c_str());
                    return;
                }

@@ -536,7 +535,7 @@ void RpcServer::establishConnection(
            auto it = server->mSessions.find(sessionId);
            if (it == server->mSessions.end()) {
                ALOGE("Cannot add thread, no record of session with ID %s",
                      base::HexString(sessionId.data(), sessionId.size()).c_str());
                      HexString(sessionId.data(), sessionId.size()).c_str());
                return;
            }
            session = it->second;
@@ -610,15 +609,14 @@ status_t RpcServer::setupRawSocketServer(unique_fd socket_fd) {
void RpcServer::onSessionAllIncomingThreadsEnded(const sp<RpcSession>& session) {
    const std::vector<uint8_t>& id = session->mId;
    LOG_ALWAYS_FATAL_IF(id.empty(), "Server sessions must be initialized with ID");
    LOG_RPC_DETAIL("Dropping session with address %s",
                   base::HexString(id.data(), id.size()).c_str());
    LOG_RPC_DETAIL("Dropping session with address %s", HexString(id.data(), id.size()).c_str());

    RpcMutexLockGuard _l(mLock);
    auto it = mSessions.find(id);
    LOG_ALWAYS_FATAL_IF(it == mSessions.end(), "Bad state, unknown session id %s",
                        base::HexString(id.data(), id.size()).c_str());
                        HexString(id.data(), id.size()).c_str());
    LOG_ALWAYS_FATAL_IF(it->second != session, "Bad state, session has id mismatch %s",
                        base::HexString(id.data(), id.size()).c_str());
                        HexString(id.data(), id.size()).c_str());
    (void)mSessions.erase(it);
}

+2 −4
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@

#include <string_view>

#include <android-base/hex.h>
#include <android-base/macros.h>
#include <android-base/scopeguard.h>
#include <binder/BpBinder.h>
@@ -310,8 +309,7 @@ status_t RpcSession::readId() {
    status = state()->getSessionId(connection.get(), sp<RpcSession>::fromExisting(this), &mId);
    if (status != OK) return status;

    LOG_RPC_DETAIL("RpcSession %p has id %s", this,
                   base::HexString(mId.data(), mId.size()).c_str());
    LOG_RPC_DETAIL("RpcSession %p has id %s", this, HexString(mId.data(), mId.size()).c_str());
    return OK;
}

@@ -709,7 +707,7 @@ status_t RpcSession::initAndAddConnection(RpcTransportFd fd, const std::vector<u
                                                std::nullopt, nullptr);
        if (sendSessionIdStatus != OK) {
            ALOGE("Could not write session ID ('%s') to socket: %s",
                  base::HexString(sessionId.data(), sessionId.size()).c_str(),
                  HexString(sessionId.data(), sessionId.size()).c_str(),
                  statusToString(sendSessionIdStatus).c_str());
            return sendSessionIdStatus;
        }
+2 −3
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@

#include "RpcState.h"

#include <android-base/hex.h>
#include <android-base/macros.h>
#include <android-base/scopeguard.h>
#include <android-base/stringprintf.h>
@@ -363,7 +362,7 @@ status_t RpcState::rpcSend(
    for (int i = 0; i < niovs; i++) {
        LOG_RPC_DETAIL("Sending %s (part %d of %d) on RpcTransport %p: %s",
                       what, i + 1, niovs, connection->rpcTransport.get(),
                       android::base::HexString(iovs[i].iov_base, iovs[i].iov_len).c_str());
                       HexString(iovs[i].iov_base, iovs[i].iov_len).c_str());
    }

    if (status_t status =
@@ -398,7 +397,7 @@ status_t RpcState::rpcRec(
    for (int i = 0; i < niovs; i++) {
        LOG_RPC_DETAIL("Received %s (part %d of %d) on RpcTransport %p: %s",
                       what, i + 1, niovs, connection->rpcTransport.get(),
                       android::base::HexString(iovs[i].iov_base, iovs[i].iov_len).c_str());
                       HexString(iovs[i].iov_base, iovs[i].iov_len).c_str());
    }
    return OK;
}
+19 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

#include "Utils.h"

#include <android-base/logging.h>
#include <string.h>

namespace android {
@@ -24,4 +25,22 @@ void zeroMemory(uint8_t* data, size_t size) {
    memset(data, 0, size);
}

std::string HexString(const void* bytes, size_t len) {
    CHECK(bytes != nullptr || len == 0) << bytes << " " << len;

    // b/132916539: Doing this the 'C way', std::setfill triggers ubsan implicit conversion
    const uint8_t* bytes8 = static_cast<const uint8_t*>(bytes);
    const char chars[] = "0123456789abcdef";
    std::string result;
    result.resize(len * 2);

    for (size_t i = 0; i < len; i++) {
        const auto c = bytes8[i];
        result[2 * i] = chars[c >> 4];
        result[2 * i + 1] = chars[c & 0xf];
    }

    return result;
}

} // namespace android
+6 −0
Original line number Diff line number Diff line
@@ -70,4 +70,10 @@ struct Span {
    }
};

// Converts binary data into a hexString.
//
// Hex values are printed in order, e.g. 0xDEAD will result in 'adde' because
// Android is little-endian.
std::string HexString(const void* bytes, size_t len);

}   // namespace android
Loading