-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Bug: hasMetadataByHandlers returns true when require='some' and all handlers fail #9026
Copy link
Copy link
Open
Description
Bug
hasMetadataByHandlers in invokeai/frontend/web/src/features/metadata/parsing.tsx returns true when require: 'some' and all handlers reject. It should return false.
Current code
const hasMetadataByHandlers = async (arg) => {
const { metadata, handlers, store, require } = arg;
for (const handler of handlers) {
try {
await handler.parse(metadata, store);
if (require === 'some') {
return true; // ← correct: at least one succeeded
}
} catch {
if (require === 'all') {
return false; // ← correct: one failed, not all
}
}
}
return true; // ← BUG: reached when require='some' and ALL handlers threw
};Expected behavior
When require: 'some', the function should return false if no handler's parse() resolved successfully.
Suggested fix
// after the loop:
return require === 'all'; // true if all succeeded (require='all'), false if none did (require='some')Or equivalently, track whether any handler succeeded:
let anySucceeded = false;
for (const handler of handlers) {
try {
await handler.parse(metadata, store);
anySucceeded = true;
if (require === 'some') return true;
} catch {
if (require === 'all') return false;
}
}
return anySucceeded;Impact
Any caller using require: 'some' will get a false positive when no metadata keys match. This was discovered while implementing Qwen Image metadata handlers that correctly reject on missing keys — the hasMetadataByHandlers check still returned true for empty metadata.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels