-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Normal
-
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.
- has related issue
-
PICARD-3392 V3 TypeErrors when loading tracks
-
- Closed
-