fix: extension lifecycle leaks, image allowlist, generic image label

Audit fixes for the extension:

- Track and disconnect the changed::excluded-apps GSettings handler in
  disable() (it was the one connection whose id was never captured).
- Track the _stopDaemon 1.5s force-kill timer and cancel any leftover on
  enable(), so the source can't outlive a disable->enable cycle.
- Guard the exclusion-path delete with _proxy?.DeleteItemAsync.
- Mirror the daemon's image allowlist (drop avif/svg) in _pickMime.
- Show a generic "Image" label for all image rows instead of singling out
  PNG; the thumbnail identifies the image and the on-clipboard format (often
  PNG even for a copied GIF/WebP) is an implementation detail.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Eduard Tolosa 2026-05-26 17:29:37 -05:00
parent e7b0392d92
commit 332ec4064a
2 changed files with 21 additions and 7 deletions

View file

@ -224,7 +224,10 @@ export const ClipboardItem = GObject.registerClass({
let subText = '';
if (mimeType.startsWith('image/')) {
mainText = mimeType === 'image/png' ? 'PNG image' : 'Image';
// Generic label - the thumbnail identifies the image, and the
// on-clipboard format (often PNG even for a copied GIF/WebP) is an
// implementation detail that misleads more than it informs.
mainText = 'Image';
} else if (isUrl(preview)) {
mainText = preview.trim();
try {