From 83bca91db56a95e640137590b990756a379b6c19 Mon Sep 17 00:00:00 2001 From: jwang19 Date: Thu, 5 Feb 2026 11:56:05 +0800 Subject: [PATCH 1/3] fix: stop fetching img if it's external --- src/webviews/jiraIssueWebview.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/webviews/jiraIssueWebview.ts b/src/webviews/jiraIssueWebview.ts index f3d925894..26303b319 100644 --- a/src/webviews/jiraIssueWebview.ts +++ b/src/webviews/jiraIssueWebview.ts @@ -1882,6 +1882,7 @@ export class JiraIssueWebview imgData: '', nonce: msg.nonce, }); + break; } const url = href.toString(); From 964159587062eaa86a0ec0859c560f22f8c2528b Mon Sep 17 00:00:00 2001 From: jwang19 Date: Fri, 6 Feb 2026 06:36:35 +0800 Subject: [PATCH 2/3] fix: external image url in start work --- .../webview/controller/startwork/startWorkWebviewController.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/webview/controller/startwork/startWorkWebviewController.ts b/src/lib/webview/controller/startwork/startWorkWebviewController.ts index b8c0bb96c..473917cd0 100644 --- a/src/lib/webview/controller/startwork/startWorkWebviewController.ts +++ b/src/lib/webview/controller/startwork/startWorkWebviewController.ts @@ -192,6 +192,7 @@ export class StartWorkWebviewController implements WebviewController Date: Fri, 6 Feb 2026 06:59:20 +0800 Subject: [PATCH 3/3] unit tests --- .../startWorkWebviewController.test.ts | 10 +-------- src/webviews/jiraIssueWebview.test.ts | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/lib/webview/controller/startwork/startWorkWebviewController.test.ts b/src/lib/webview/controller/startwork/startWorkWebviewController.test.ts index 4a1546e3f..b70424e09 100644 --- a/src/lib/webview/controller/startwork/startWorkWebviewController.test.ts +++ b/src/lib/webview/controller/startwork/startWorkWebviewController.test.ts @@ -440,15 +440,7 @@ describe('StartWorkWebviewController', () => { await controller.onMessageReceived(externalImageAction); - // Note: The implementation has a bug - it should return after posting the empty response, - // but it continues and tries to fetch the external URL - expect(mockTransportFactory.get).toHaveBeenCalledWith('https://external.com/image.png', { - method: 'GET', - headers: { - Authorization: undefined, - }, - responseType: 'arraybuffer', - }); + expect(mockTransportFactory.get).not.toHaveBeenCalled(); expect(mockMessagePoster).toHaveBeenCalledWith({ type: 'getImageDone', imgData: '', diff --git a/src/webviews/jiraIssueWebview.test.ts b/src/webviews/jiraIssueWebview.test.ts index 48ac320e9..751acda48 100644 --- a/src/webviews/jiraIssueWebview.test.ts +++ b/src/webviews/jiraIssueWebview.test.ts @@ -1716,6 +1716,28 @@ describe('JiraIssueWebview', () => { }); }); + test('should skip external images and not fetch', async () => { + const mockGet = jest.fn().mockResolvedValue({ data: Buffer.from('image-data') }); + mockJiraClient.transportFactory.mockReturnValue({ get: mockGet }); + + const msg = { + action: 'getImage', + url: 'https://external.com/image.png', + nonce: 'nonce-123', + }; + + const postMessageSpy = jest.spyOn(jiraIssueWebview as any, 'postMessage'); + + await jiraIssueWebview['onMessageReceived'](msg); + + expect(mockGet).not.toHaveBeenCalled(); + expect(postMessageSpy).toHaveBeenCalledWith({ + type: 'getImageDone', + imgData: '', + nonce: 'nonce-123', + }); + }); + test('should handle refreshIssue action', async () => { const msg = { action: 'refreshIssue' };