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

Commit b1d83e83 authored by Atneya Nair's avatar Atneya Nair
Browse files

Migrate metrics away from deprecated writeCString

writeCString is deprecated. writeString8 is preferred to writeCString to
avoid buffer overruns.

Test: compiles
Test: adb shell dumpsys media.metrics
Bug: chore
Flag: EXEMPT refactor
Change-Id: Id09f199b2ecd74c3c47126eb3e19f9a4b3b87b4b
parent f91c0ac7
Loading
Loading
Loading
Loading
+6 −11
Original line number Diff line number Diff line
@@ -60,15 +60,13 @@ status_t mediametrics::Item::readFromParcel(const Parcel& data) {
}

status_t mediametrics::Item::readFromParcel0(const Parcel& data) {
    const char *s = data.readCString();
    mKey = s == nullptr ? "" : s;
    mKey = std::string{data.readString8()};
    int32_t pid, uid;
    status_t status = data.readInt32(&pid) ?: data.readInt32(&uid);
    if (status != NO_ERROR) return status;
    mPid = (pid_t)pid;
    mUid = (uid_t)uid;
    s = data.readCString();
    mPkgName = s == nullptr ? "" : s;
    mPkgName = std::string(data.readString8());
    int32_t count;
    int64_t version, timestamp;
    status = data.readInt64(&version) ?: data.readInt64(&timestamp) ?: data.readInt32(&count);
@@ -103,10 +101,10 @@ status_t mediametrics::Item::writeToParcel(Parcel *data) const {

status_t mediametrics::Item::writeToParcel0(Parcel *data) const {
    status_t status =
        data->writeCString(mKey.c_str())
        data->writeString8(String8{mKey})
        ?: data->writeInt32(mPid)
        ?: data->writeInt32(mUid)
        ?: data->writeCString(mPkgName.c_str())
        ?: data->writeString8(String8{mPkgName})
        ?: data->writeInt64(mPkgVersionCode)
        ?: data->writeInt64(mTimestamp);
    if (status != NO_ERROR) return status;
@@ -268,8 +266,7 @@ status_t mediametrics::Item::readFromByteString(const char *bufferptr, size_t le

status_t mediametrics::Item::Prop::readFromParcel(const Parcel& data)
{
    const char *key = data.readCString();
    if (key == nullptr) return BAD_VALUE;
    const std::string key {data.readString8()};
    int32_t type;
    status_t status = data.readInt32(&type);
    if (status != NO_ERROR) return status;
@@ -293,9 +290,7 @@ status_t mediametrics::Item::Prop::readFromParcel(const Parcel& data)
        mElem = value;
    } break;
    case mediametrics::kTypeCString: {
        const char *s = data.readCString();
        if (s == nullptr) return BAD_VALUE;
        mElem = s;
        mElem = std::string{data.readString8()};
    } break;
    case mediametrics::kTypeRate: {
        std::pair<int64_t, int64_t> rate;
+21 −23
Original line number Diff line number Diff line
@@ -433,48 +433,42 @@ protected:
    }

    template <typename T>
    static status_t writeToParcel(
            const char *name, const T& value, Parcel *parcel) = delete;
    static status_t writeToParcel(std::string_view name, const T& value, Parcel *parcel) = delete;
    template <> // static
    status_t writeToParcel(
            const char *name, const int32_t& value, Parcel *parcel) {
        return parcel->writeCString(name)
    status_t writeToParcel(std::string_view name, const int32_t& value, Parcel *parcel) {
        return parcel->writeString8(name.data(), name.length())
               ?: parcel->writeInt32(get_type_of<int32_t>::value)
               ?: parcel->writeInt32(value);
    }
    template <> // static
    status_t writeToParcel(
            const char *name, const int64_t& value, Parcel *parcel) {
        return parcel->writeCString(name)
    status_t writeToParcel(std::string_view name, const int64_t& value, Parcel *parcel) {
        return parcel->writeString8(name.data(), name.length())
               ?: parcel->writeInt32(get_type_of<int64_t>::value)
               ?: parcel->writeInt64(value);
    }
    template <> // static
    status_t writeToParcel(
            const char *name, const double& value, Parcel *parcel) {
        return parcel->writeCString(name)
    status_t writeToParcel(std::string_view name, const double& value, Parcel *parcel) {
        return parcel->writeString8(name.data(), name.length())
               ?: parcel->writeInt32(get_type_of<double>::value)
               ?: parcel->writeDouble(value);
    }
    template <>  // static
    status_t writeToParcel(
            const char *name, const std::pair<int64_t, int64_t>& value, Parcel *parcel) {
        return parcel->writeCString(name)
    status_t writeToParcel(std::string_view name, const std::pair<int64_t, int64_t>& value,
                           Parcel* parcel) {
        return parcel->writeString8(name.data(), name.length())
               ?: parcel->writeInt32(get_type_of< std::pair<int64_t, int64_t>>::value)
               ?: parcel->writeInt64(value.first)
               ?: parcel->writeInt64(value.second);
    }
    template <> // static
    status_t writeToParcel(
            const char *name, const std::string& value, Parcel *parcel) {
        return parcel->writeCString(name)
    status_t writeToParcel(std::string_view name, const std::string& value, Parcel *parcel) {
        return parcel->writeString8(name.data(), name.length())
               ?: parcel->writeInt32(get_type_of<std::string>::value)
               ?: parcel->writeCString(value.c_str());
               ?: parcel->writeString8(value.data(), value.length());
    }
    template <> // static
    status_t writeToParcel(
            const char *name, const std::monostate&, Parcel *parcel) {
        return parcel->writeCString(name)
    status_t writeToParcel(std::string_view name, const std::monostate&, Parcel *parcel) {
        return parcel->writeString8(name.data(), name.length())
               ?: parcel->writeInt32(get_type_of<std::monostate>::value);
    }

@@ -802,6 +796,10 @@ public:
            mName = name;
        }

        void setName(std::string name) {
            mName = std::move(name);
        }

        bool isNamed(const char *name) const {
            return mName == name;
        }
@@ -848,7 +846,7 @@ public:

        status_t writeToParcel(Parcel *parcel) const {
            return std::visit([this, parcel](auto &value) {
                    return BaseItem::writeToParcel(mName.c_str(), value, parcel);}, mElem);
                    return BaseItem::writeToParcel(mName, value, parcel);}, mElem);
        }

        void toStringBuffer(char *buffer, size_t length) const {