mastodon-sc / mastodon

Mastodon – a large-scale tracking and track-editing framework for large, multi-view images.
BSD 2-Clause "Simplified" License
66 stars 20 forks source link

Mastodon crashes if a settings file (plugin or config) has been manually and incorrectly edited. #252

Closed tinevez closed 1 year ago

tinevez commented 1 year ago

All the settings for the Style framework are saved n YAML files, within ~/.mastodon` folder. They can be manually edited, but if the edition is incorrect, Mastodon will crash and does not recuperate.

Example editing the semi automatic tracker config file, we get this exception:

Exception in thread "AWT-EventQueue-0" expected '<document start>', but found '<block mapping start>'
 in 'reader', line 6, column 3:
      adsfkjadfskjasdfjk: 5
      ^

    at org.yaml.snakeyaml.parser.ParserImpl$ParseDocumentStart.produce(ParserImpl.java:274)
    at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:185)
    at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:175)
    at org.yaml.snakeyaml.composer.Composer.checkNode(Composer.java:108)
    at org.yaml.snakeyaml.constructor.BaseConstructor.checkData(BaseConstructor.java:155)
    at org.yaml.snakeyaml.Yaml$1.hasNext(Yaml.java:494)
    at org.mastodon.tracking.mamut.trackmate.semiauto.ui.SemiAutomaticTrackerSettingsManager.loadStyles(SemiAutomaticTrackerSettingsManager.java:128)
    at org.mastodon.tracking.mamut.trackmate.semiauto.ui.SemiAutomaticTrackerSettingsManager.loadStyles(SemiAutomaticTrackerSettingsManager.java:115)
    at org.mastodon.tracking.mamut.trackmate.semiauto.ui.SemiAutomaticTrackerSettingsManager.<init>(SemiAutomaticTrackerSettingsManager.java:74)
    at org.mastodon.tracking.mamut.trackmate.semiauto.ui.SemiAutomaticTrackerSettingsManager.<init>(SemiAutomaticTrackerSettingsManager.java:65)
    at org.mastodon.tracking.mamut.trackmate.semiauto.SemiAutomaticTrackerPlugin.setAppPluginModel(SemiAutomaticTrackerPlugin.java:217)
    at org.mastodon.tracking.mamut.trackmate.semiauto.SemiAutomaticTrackerPlugin.setAppPluginModel(SemiAutomaticTrackerPlugin.java:1)
    at org.mastodon.mamut.ProjectModel.lambda$2(ProjectModel.java:205)
    at org.mastodon.app.plugin.PluginUtils.lambda$0(PluginUtils.java:35)
    at org.mastodon.app.plugin.PluginUtils.forEachDiscoveredPlugin(PluginUtils.java:68)
    at org.mastodon.app.plugin.PluginUtils.forEachDiscoveredPlugin(PluginUtils.java:36)
    at org.mastodon.mamut.ProjectModel.discoverPlugins(ProjectModel.java:208)
    at org.mastodon.mamut.ProjectModel.<init>(ProjectModel.java:131)
    at org.mastodon.mamut.ProjectModel.create(ProjectModel.java:220)
    at org.mastodon.mamut.io.ProjectLoader.open(ProjectLoader.java:158)
...

And Mastodon does not launch.

The user should receive a warning, not a crash. Noticed by @ksugar

tinevez commented 1 year ago

Fixed with 6db9f933c6b45d1eab6ab294fe7c4d2e7c021b8e and d090c58002aa8682a08553bd4b49c5bfd7ccb12e

The errors are caught gracefully and the user notified.