Fix LruCache, allow std:string caching

The default initalization for mNullValue uses 0 which is in the case of
a std::string TValue will invoke the contructor with undefined behavior
parameter.

Using an empty uniform initialization {} addresses the problem.

Test: Already tested in lrucache_test.cpp
Bug: 257127748
Change-Id: I37420ce8a16c99f3014538a0208d7e113870b1c7
This commit is contained in:
Fabien Sanglard 2023-06-14 23:08:02 +00:00
parent 61b9935e50
commit 2aba0a2283
2 changed files with 13 additions and 10 deletions

View file

@ -29,6 +29,8 @@ typedef const char* StringValue;
struct ComplexKey {
int k;
explicit ComplexKey() : k(0) { instanceCount += 1; }
explicit ComplexKey(int k) : k(k) {
instanceCount += 1;
}
@ -57,6 +59,8 @@ ssize_t ComplexKey::instanceCount = 0;
struct ComplexValue {
int v;
explicit ComplexValue() : v(0) { instanceCount += 1; }
explicit ComplexValue(int v) : v(v) {
instanceCount += 1;
}
@ -83,10 +87,9 @@ struct KeyWithPointer {
struct KeyFailsOnCopy : public ComplexKey {
public:
KeyFailsOnCopy(const KeyFailsOnCopy& key) : ComplexKey(key) {
ADD_FAILURE();
}
KeyFailsOnCopy(int key) : ComplexKey(key) { }
KeyFailsOnCopy() : ComplexKey() {}
KeyFailsOnCopy(const KeyFailsOnCopy& key) : ComplexKey(key) { ADD_FAILURE(); }
KeyFailsOnCopy(int key) : ComplexKey(key) {}
};
} // namespace

View file

@ -161,12 +161,12 @@ public:
// Implementation is here, because it's fully templated
template <typename TKey, typename TValue>
LruCache<TKey, TValue>::LruCache(uint32_t maxCapacity)
: mSet(new LruCacheSet())
, mListener(nullptr)
, mOldest(nullptr)
, mYoungest(nullptr)
, mMaxCapacity(maxCapacity)
, mNullValue(0) {
: mSet(new LruCacheSet()),
mListener(nullptr),
mOldest(nullptr),
mYoungest(nullptr),
mMaxCapacity(maxCapacity),
mNullValue{} {
mSet->max_load_factor(1.0);
};