Bug 1411480 (attempt 2) - Make PrefValue::mStringVal const. r=glandium.

This makes it clear that the stored string values are never modified.

It requires some const_casts to free the strings, but that feels like an ok
trade-off.

MozReview-Commit-ID: JikBT3uwpfq

--HG--
extra : rebase_source : 1720969ba2c1ae245dff91a6d3a85d48fb669ced
This commit is contained in:
Nicholas Nethercote 2017-10-26 16:27:09 +11:00
parent ad06d5cebc
commit 6e67b39c9c

View File

@ -148,7 +148,7 @@ static const uint32_t MAX_PREF_LENGTH = 1 * 1024 * 1024;
static const uint32_t MAX_ADVISABLE_PREF_LENGTH = 4 * 1024;
union PrefValue {
char* mStringVal;
const char* mStringVal;
int32_t mIntVal;
bool mBoolVal;
};
@ -267,12 +267,8 @@ ClearPrefEntry(PLDHashTable* aTable, PLDHashEntryHdr* aEntry)
{
auto pref = static_cast<PrefHashEntry*>(aEntry);
if (pref->mPrefFlags.IsTypeString()) {
if (pref->mDefaultPref.mStringVal) {
free(pref->mDefaultPref.mStringVal);
}
if (pref->mUserPref.mStringVal) {
free(pref->mUserPref.mStringVal);
}
free(const_cast<char*>(pref->mDefaultPref.mStringVal));
free(const_cast<char*>(pref->mUserPref.mStringVal));
}
// Don't need to free this because it's allocated in memory owned by
@ -469,7 +465,7 @@ PREF_SetCharPref(const char* aPrefName, const char* aValue, bool aSetDefault)
}
PrefValue pref;
pref.mStringVal = const_cast<char*>(aValue);
pref.mStringVal = aValue;
return pref_HashPref(
aPrefName, pref, PrefType::String, aSetDefault ? kPrefSetDefault : 0);
@ -611,7 +607,7 @@ pref_EntryHasAdvisablySizedValues(PrefHashEntry* aHashEntry)
return true;
}
char* stringVal;
const char* stringVal;
if (aHashEntry->mPrefFlags.HasDefault()) {
stringVal = aHashEntry->mDefaultPref.mStringVal;
if (strlen(stringVal) > MAX_ADVISABLE_PREF_LENGTH) {
@ -704,7 +700,7 @@ PREF_CopyCharPref(const char* aPrefName, char** aValueOut, bool aGetDefault)
}
nsresult rv = NS_ERROR_UNEXPECTED;
char* stringVal;
const char* stringVal;
PrefHashEntry* pref = pref_HashTableLookup(aPrefName);
if (pref && pref->mPrefFlags.IsTypeString()) {
@ -957,7 +953,7 @@ pref_SetValue(PrefValue* aExistingValue,
PrefType aNewType)
{
if (aFlags.IsTypeString() && aExistingValue->mStringVal) {
free(aExistingValue->mStringVal);
free(const_cast<char*>(aExistingValue->mStringVal));
}
aFlags.SetPrefType(aNewType);