From 8a9ccb52d76108c558b9f20d907e8e5bfc7e4f41 Mon Sep 17 00:00:00 2001 From: Christina Holland Date: Tue, 20 Apr 2021 12:58:42 -0700 Subject: [PATCH] Fix FirebaseStorageError message recursion bug --- .changeset/friendly-cooks-tan.md | 5 +++++ packages/storage/src/implementation/error.ts | 18 +++++++----------- 2 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 .changeset/friendly-cooks-tan.md diff --git a/.changeset/friendly-cooks-tan.md b/.changeset/friendly-cooks-tan.md new file mode 100644 index 00000000000..b1cb859876a --- /dev/null +++ b/.changeset/friendly-cooks-tan.md @@ -0,0 +1,5 @@ +--- +'@firebase/storage': patch +--- + +Fix infinite recursion caused by `FirebaseStorageError` message getter. diff --git a/packages/storage/src/implementation/error.ts b/packages/storage/src/implementation/error.ts index c0c20d1c6eb..e58e969395b 100644 --- a/packages/storage/src/implementation/error.ts +++ b/packages/storage/src/implementation/error.ts @@ -22,6 +22,7 @@ import { CONFIG_STORAGE_BUCKET_KEY } from './constants'; * @public */ export class FirebaseStorageError extends FirebaseError { + private readonly _baseMessage: string; /** * Stores custom error data unque to FirebaseStorageError. */ @@ -37,6 +38,7 @@ export class FirebaseStorageError extends FirebaseError { prependCode(code), `Firebase Storage: ${message} (${prependCode(code)})` ); + this._baseMessage = this.message; // Without this, `instanceof FirebaseStorageError`, in tests for example, // returns false. Object.setPrototypeOf(this, FirebaseStorageError.prototype); @@ -49,17 +51,6 @@ export class FirebaseStorageError extends FirebaseError { return prependCode(code) === this.code; } - /** - * Error message including serverResponse if available. - */ - get message(): string { - if (this.customData.serverResponse) { - return `${this.message}\n${this.customData.serverResponse}`; - } else { - return this.message; - } - } - /** * Optional response message that was added by the server. */ @@ -69,6 +60,11 @@ export class FirebaseStorageError extends FirebaseError { set serverResponse(serverResponse: string | null) { this.customData.serverResponse = serverResponse; + if (this.customData.serverResponse) { + this.message = `${this._baseMessage}\n${this.customData.serverResponse}`; + } else { + this.message = this._baseMessage; + } } }