Bug 506224 - Avoid storing locked preferences values in user prefs [r=dwitte]
authorMike Hommey <mh+mozilla@glandium.org>
Thu, 06 May 2010 09:31:36 +0200
changeset 41962 b723f72611ea
parent 41961 7a6a20da79ae
child 41963 41c2eb76d3a4
push id13160
push usermh@glandium.org
push date2010-05-06 08:17 +0000
treeherdermozilla-central@41c2eb76d3a4 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdwitte
bugs506224
milestone1.9.3a5pre
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
Bug 506224 - Avoid storing locked preferences values in user prefs [r=dwitte]
modules/libpref/src/prefapi.cpp
modules/libpref/test/unit/test_bug506224.js
--- a/modules/libpref/src/prefapi.cpp
+++ b/modules/libpref/src/prefapi.cpp
@@ -327,18 +327,16 @@ pref_savePref(PLDHashTable *table, PLDHa
     // where we're getting our pref from
     PrefValue* sourcePref;
 
     if (PREF_HAS_USER_VALUE(pref) &&
         pref_ValueChanged(pref->defaultPref,
                           pref->userPref,
                           (PrefType) PREF_TYPE(pref)))
         sourcePref = &pref->userPref;
-    else if (PREF_IS_LOCKED(pref))
-        sourcePref = &pref->defaultPref;
     else
         // do not save default prefs that haven't changed
         return PL_DHASH_NEXT;
 
     // strings are in quotes!
     if (pref->flags & PREF_STRING) {
         prefValue = '\"';
         str_escape(sourcePref->stringVal, prefValue);
new file mode 100644
--- /dev/null
+++ b/modules/libpref/test/unit/test_bug506224.js
@@ -0,0 +1,29 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/  */
+
+function run_test() {
+  const Cc = Components.classes;
+  const Ci = Components.interfaces;
+  const PREF_NAME = "testPref";
+
+  var ps = Cc["@mozilla.org/preferences-service;1"]
+           .getService(Ci.nsIPrefService);
+  var prefs = ps.getDefaultBranch(null);
+  var userprefs = ps.getBranch(null);
+
+  prefs.setCharPref(PREF_NAME, "test0");
+  prefs.lockPref(PREF_NAME);
+  do_check_eq("test0", userprefs.getCharPref(PREF_NAME));
+  do_check_eq(false, userprefs.prefHasUserValue(PREF_NAME));
+
+  var file = do_get_profile();
+  file.append("prefs.js");
+  ps.savePrefFile(file);
+
+  prefs.unlockPref(PREF_NAME);
+  prefs.setCharPref(PREF_NAME, "test1");
+  ps.readUserPrefs(file);
+
+  do_check_eq("test1", userprefs.getCharPref(PREF_NAME));
+  do_check_eq(false, userprefs.prefHasUserValue(PREF_NAME));
+}