# Buggy code
def _handle_migrations(self, settings):
    """Migrate older configs to the newest format."""
    # Simple renamed/deleted options
    for name in list(settings):
        if name in configdata.MIGRATIONS.renamed:
            new_name = configdata.MIGRATIONS.renamed[name]
            log.config.debug("Renaming {} to {}".format(name, new_name))
            settings[new_name] = settings[name]
            del settings[name]
            self._mark_changed()
        elif name in configdata.MIGRATIONS.deleted:
            log.config.debug("Removing {}".format(name))
            del settings[name]
            self._mark_changed()

    # tabs.persist_mode_on_change got merged into tabs.mode_on_change
    old = "tabs.persist_mode_on_change"
    new = "tabs.mode_on_change"
    if old in settings:
        settings[new] = {}
        for scope, val in settings[old].items():
            if val:
                settings[new][scope] = "persist"
            else:
                settings[new][scope] = "normal"

        del settings[old]
        self._mark_changed()

    # bindings.default can't be set in autoconfig.yml anymore, so ignore
    # old values.
    if "bindings.default" in settings:
        del settings["bindings.default"]
        self._mark_changed()

    return settings


# Traceback (ValueError)
16:39:44 DEBUG    init       app:_init_modules:468 Initializing websettings...
16:39:45 ERROR    misc       crashsignal:exception_hook:216 Uncaught exception
Traceback (most recent call last):
File "/bin/qutebrowser", line 11, in <module>
load_entry_point('qutebrowser==1.1.1', 'gui_scripts', 'qutebrowser')()
File "/usr/lib/python3.6/site-packages/qutebrowser/qutebrowser.py", line 188, in main
return app.run(args)
File "/usr/lib/python3.6/site-packages/qutebrowser/app.py", line 137, in run
init(args, crash_handler)
File "/usr/lib/python3.6/site-packages/qutebrowser/app.py", line 163, in init
_init_modules(args, crash_handler)
File "/usr/lib/python3.6/site-packages/qutebrowser/app.py", line 469, in _init_modules
websettings.init(args)
File "/usr/lib/python3.6/site-packages/qutebrowser/config/websettings.py", line 215, in init
webenginesettings.init(args)
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/webenginesettings.py", line 297, in init
websettings.init_mappings(MAPPINGS)
File "/usr/lib/python3.6/site-packages/qutebrowser/config/websettings.py", line 198, in init_mappings
mapping.set(value)
File "/usr/lib/python3.6/site-packages/qutebrowser/config/websettings.py", line 72, in set
self._set(value, settings=settings)
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/webenginesettings.py", line 154, in _set
filenames = [self._find_installed(code) for code in value]
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/webenginesettings.py", line 154, in <listcomp>
filenames = [self._find_installed(code) for code in value]
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/webenginesettings.py", line 143, in _find_installed
local_filename = spell.local_filename(code)
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/spell.py", line 64, in local_filename
all_installed = local_files(code)
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/spell.py", line 51, in local_files
for matching_dict in sorted(matching_dicts, key=version, reverse=True):
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/spell.py", line 36, in version
.format(filename))
ValueError: the given dictionary file name is malformed: /usr/share/qt/qtwebengine_dictionaries/en-US.bdic

# Fixed code
def _handle_migrations(self, settings):
    """Migrate older configs to the newest format."""
    # Simple renamed/deleted options
    for name in list(settings):
        if name in configdata.MIGRATIONS.renamed:
            new_name = configdata.MIGRATIONS.renamed[name]
            log.config.debug("Renaming {} to {}".format(name, new_name))
            settings[new_name] = settings[name]
            del settings[name]
            self._mark_changed()
        elif name in configdata.MIGRATIONS.deleted:
            log.config.debug("Removing {}".format(name))
            del settings[name]
            self._mark_changed()

    # tabs.persist_mode_on_change got merged into tabs.mode_on_change
    old = "tabs.persist_mode_on_change"
    new = "tabs.mode_on_change"
    if old in settings:
        settings[new] = {}
        for scope, val in settings[old].items():
            if val:
                settings[new][scope] = "persist"
            else:
                settings[new][scope] = "normal"

        del settings[old]
        self._mark_changed()

    # bindings.default can't be set in autoconfig.yml anymore, so ignore
    # old values.
    if "bindings.default" in settings:
        del settings["bindings.default"]
        self._mark_changed()

    # Option to show favicons only for pinned tabs changed the type of
    # tabs.favicons.show from Bool to String
    name = "tabs.favicons.show"
    if name in settings:
        for scope, val in settings[name].items():
            if isinstance(val, bool):
                settings[name][scope] = "always" if val else "never"
                self._mark_changed()

    return settings