ExportXMLWordPrintable

    • Type: Bug
    • Resolution: Fixed
    • Priority: Normal
    • 3.0.0rc1
    • Affects Version/s: 3.0.0b9
    • Component/s: Tags & Metadata
    • None

      `PluginFunctions.run()` in `picard/plugin.py` iterates over registered metadata processors without any per-function exception handling:

      ```
      def run(self, *args, **kwargs):
          for function in self._get_functions():
              function(*args, **kwargs)
      ```

      If any registered function raises an exception (e.g., a TypeError from a plugin with an incorrect signature, or any runtime error), the loop
      aborts immediately. All processors registered after the failing one are skipped entirely.

      The caller (`_run_album_metadata_processors` / `_finalize_loading_track` in `album.py`) catches the exception and logs it, but the damage is done, other plugins never get a chance to run.

      Expected behavior: A failing processor should be logged and skipped, with remaining processors continuing to execute normally. One broken plugin should not affect others.

      Steps to reproduce:

      1. Install two v3 plugins that register track metadata processors
      2. Ensure the first (by priority) has a bug that causes an exception
      3. Load an album: the second plugin's processor never runs

      Suggested fix: Wrap each `function(*args, **kwargs)` call in a `try/except` inside the `run()` loop, logging errors per-function.

            Assignee:
            Zas
            Reporter:
            Zas
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:

                Version Package
                3.0.0rc1