Skip to content

Commit 109cbb3

Browse files
jsayoljshcrowthe
authored andcommitted
fix(app): Allow Object.prototype member names as app names (#70)
1 parent 5f2ca5a commit 109cbb3

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

src/app/firebase_app.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,10 @@ export interface FirebaseNamespace {
217217
}
218218
}
219219

220+
const contains = function(obj, key) {
221+
return Object.prototype.hasOwnProperty.call(obj, key);
222+
};
223+
220224
let LocalPromise = local.Promise as typeof Promise;
221225

222226
const DEFAULT_ENTRY_NAME = '[DEFAULT]';
@@ -438,11 +442,10 @@ export function createFirebaseNamespace(): FirebaseNamespace {
438442
*/
439443
function app(name?: string): FirebaseApp {
440444
name = name || DEFAULT_ENTRY_NAME;
441-
let result = apps_[name];
442-
if (result === undefined) {
445+
if (!contains(apps_, name)) {
443446
error('no-app', {'name': name});
444447
}
445-
return result;
448+
return apps_[name];
446449
}
447450

448451
patchProperty(app, 'App', FirebaseAppImpl);
@@ -458,7 +461,7 @@ export function createFirebaseNamespace(): FirebaseNamespace {
458461
error('bad-app-name', {'name': name + ''});
459462
}
460463
}
461-
if (apps_[name!] !== undefined) {
464+
if (contains(apps_, name) ) {
462465
error('duplicate-app', {'name': name});
463466
}
464467

tests/app/unit/firebase_app.test.ts

+13
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,19 @@ describe("Firebase App Class", () => {
143143
});
144144
});
145145

146+
it("OK to use Object.prototype member names as app name.", () => {
147+
let app = firebase.initializeApp({}, 'toString');
148+
assert.equal(firebase.apps.length, 1);
149+
assert.equal(app.name, 'toString');
150+
assert.strictEqual(firebase.app('toString'), app);
151+
});
152+
153+
it("Error to get uninitialized app using Object.prototype member name.", () => {
154+
assert.throws(() => {
155+
firebase.app('toString');
156+
}, /'toString'.*created/i);
157+
});
158+
146159
it("Only calls createService on first use (per app).", () => {
147160
let registrations = 0;
148161
firebase.INTERNAL.registerService('test', (app: FirebaseApp) => {

0 commit comments

Comments
 (0)