mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 20:35:50 +00:00
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:
parent
ad06d5cebc
commit
6e67b39c9c
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user