mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-19 09:33:53 +00:00
fix(core): avoid error handling on cancelled requests to prevent crash (#6039)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
This commit is contained in:
@@ -445,6 +445,32 @@ describe('Turn', () => {
|
||||
{ type: GeminiEventType.Finished, value: 'OTHER' },
|
||||
]);
|
||||
});
|
||||
|
||||
it('should not crash when cancelled request has malformed error', async () => {
|
||||
const abortController = new AbortController();
|
||||
|
||||
const errorToThrow = {
|
||||
response: {
|
||||
data: undefined, // Malformed error data
|
||||
},
|
||||
};
|
||||
|
||||
mockSendMessageStream.mockImplementation(async () => {
|
||||
abortController.abort();
|
||||
throw errorToThrow;
|
||||
});
|
||||
|
||||
const events = [];
|
||||
const reqParts: Part[] = [{ text: 'Test malformed error handling' }];
|
||||
|
||||
for await (const event of turn.run(reqParts, abortController.signal)) {
|
||||
events.push(event);
|
||||
}
|
||||
|
||||
expect(events).toEqual([{ type: GeminiEventType.UserCancelled }]);
|
||||
|
||||
expect(reportError).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('getDebugResponses', () => {
|
||||
|
||||
@@ -247,16 +247,17 @@ export class Turn {
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
const error = toFriendlyError(e);
|
||||
if (error instanceof UnauthorizedError) {
|
||||
throw error;
|
||||
}
|
||||
if (signal.aborted) {
|
||||
yield { type: GeminiEventType.UserCancelled };
|
||||
// Regular cancellation error, fail gracefully.
|
||||
return;
|
||||
}
|
||||
|
||||
const error = toFriendlyError(e);
|
||||
if (error instanceof UnauthorizedError) {
|
||||
throw error;
|
||||
}
|
||||
|
||||
const contextForReport = [...this.chat.getHistory(/*curated*/ true), req];
|
||||
await reportError(
|
||||
error,
|
||||
|
||||
Reference in New Issue
Block a user