diff --git a/atom/browser/api/atom_api_cookies.cc b/atom/browser/api/atom_api_cookies.cc index 882937b1c6bed..bb1913c7c36a1 100644 --- a/atom/browser/api/atom_api_cookies.cc +++ b/atom/browser/api/atom_api_cookies.cc @@ -195,13 +195,13 @@ void FlushCookieStoreOnIOThread( void SetCookieOnIO(scoped_refptr getter, std::unique_ptr details, const Cookies::SetCallback& callback) { - std::string url, name, value, domain, path; + std::string url_string, name, value, domain, path; bool secure = false; bool http_only = false; double creation_date; double expiration_date; double last_access_date; - details->GetString("url", &url); + details->GetString("url", &url_string); details->GetString("name", &name); details->GetString("value", &value); details->GetString("domain", &domain); @@ -229,22 +229,22 @@ void SetCookieOnIO(scoped_refptr getter, ? base::Time::UnixEpoch() : base::Time::FromDoubleT(last_access_date); } - - std::unique_ptr canonical_cookie( - net::CanonicalCookie::CreateSanitizedCookie( - GURL(url), name, value, domain, path, creation_time, expiration_time, - last_access_time, secure, http_only, - net::CookieSameSite::DEFAULT_MODE, net::COOKIE_PRIORITY_DEFAULT)); auto completion_callback = base::BindOnce(OnSetCookie, callback); - if (!canonical_cookie || !canonical_cookie->IsCanonical()) { + GURL url(url_string); + if (!url.is_valid()) { std::move(completion_callback).Run(false); return; } - if (url.empty()) { + if (name.empty()) { std::move(completion_callback).Run(false); return; } - if (name.empty()) { + std::unique_ptr canonical_cookie( + net::CanonicalCookie::CreateSanitizedCookie( + url, name, value, domain, path, creation_time, expiration_time, + last_access_time, secure, http_only, + net::CookieSameSite::DEFAULT_MODE, net::COOKIE_PRIORITY_DEFAULT)); + if (!canonical_cookie || !canonical_cookie->IsCanonical()) { std::move(completion_callback).Run(false); return; } diff --git a/spec/api-session-spec.js b/spec/api-session-spec.js index 6e92aa263971f..19346071266db 100644 --- a/spec/api-session-spec.js +++ b/spec/api-session-spec.js @@ -103,6 +103,18 @@ describe('session module', () => { }) }) + it('yields an error when setting a cookie with an invalid URL', (done) => { + session.defaultSession.cookies.set({ + url: 'asdf', + name: '1', + value: '1' + }, (error) => { + assert(error, 'Should have an error') + assert.strictEqual(error.message, 'Setting cookie failed') + done() + }) + }) + it('should over-write the existent cookie', (done) => { session.defaultSession.cookies.set({ url,