From 61076542561359d07f38302f361d05e57e44bf9a Mon Sep 17 00:00:00 2001 From: Darshan Sen Date: Thu, 5 May 2022 13:06:50 +0530 Subject: [PATCH] fix: throw a new exception for safeStorage before app is ready Signed-off-by: Darshan Sen --- shell/browser/api/electron_api_safe_storage.cc | 10 ++++++++++ spec-main/fixtures/crash-cases/safe-storage/index.js | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/shell/browser/api/electron_api_safe_storage.cc b/shell/browser/api/electron_api_safe_storage.cc index 25c23f67a8632..7b1b2c6a8d5fb 100644 --- a/shell/browser/api/electron_api_safe_storage.cc +++ b/shell/browser/api/electron_api_safe_storage.cc @@ -44,6 +44,11 @@ bool IsEncryptionAvailable() { v8::Local EncryptString(v8::Isolate* isolate, const std::string& plaintext) { if (!IsEncryptionAvailable()) { + if (!Browser::Get()->is_ready()) { + gin_helper::ErrorThrower(isolate).ThrowError( + "safeStorage cannot be used before app is ready"); + return v8::Local(); + } gin_helper::ErrorThrower(isolate).ThrowError( "Error while decrypting the ciphertext provided to " "safeStorage.decryptString. " @@ -67,6 +72,11 @@ v8::Local EncryptString(v8::Isolate* isolate, std::string DecryptString(v8::Isolate* isolate, v8::Local buffer) { if (!IsEncryptionAvailable()) { + if (!Browser::Get()->is_ready()) { + gin_helper::ErrorThrower(isolate).ThrowError( + "safeStorage cannot be used before app is ready"); + return v8::Local(); + } gin_helper::ErrorThrower(isolate).ThrowError( "Error while decrypting the ciphertext provided to " "safeStorage.decryptString. " diff --git a/spec-main/fixtures/crash-cases/safe-storage/index.js b/spec-main/fixtures/crash-cases/safe-storage/index.js index 57752cd15904a..151751820a8d5 100644 --- a/spec-main/fixtures/crash-cases/safe-storage/index.js +++ b/spec-main/fixtures/crash-cases/safe-storage/index.js @@ -14,8 +14,8 @@ const { expect } = require('chai'); expect(Buffer.isBuffer(ciphertext)).to.equal(true); expect(safeStorage.decryptString(ciphertext)).to.equal(plaintext); } else { - expect(() => safeStorage.encryptString('plaintext')).to.throw(/Encryption is not available/); - expect(() => safeStorage.decryptString(Buffer.from(''))).to.throw(/Decryption is not available/); + expect(() => safeStorage.encryptString('plaintext')).to.throw(/safeStorage cannot be used before app is ready/); + expect(() => safeStorage.decryptString(Buffer.from(''))).to.throw(/safeStorage cannot be used before app is ready/); } } await app.whenReady();