Unverified Commit c99f594b authored by BBsan's avatar BBsan Committed by GitHub

Fix Check for _cookieJar in HTTPClient (#6266) (#6280)

* Check for cookieJar before setting cookies

* Return as soon as possible w/o _cookieJar
parent 05d8cdde
...@@ -1543,6 +1543,10 @@ void HTTPClient::clearAllCookies() ...@@ -1543,6 +1543,10 @@ void HTTPClient::clearAllCookies()
void HTTPClient::setCookie(String date, String headerValue) void HTTPClient::setCookie(String date, String headerValue)
{ {
if (!_cookieJar)
{
return;
}
#define HTTP_TIME_PATTERN "%a, %d %b %Y %H:%M:%S" #define HTTP_TIME_PATTERN "%a, %d %b %Y %H:%M:%S"
Cookie cookie; Cookie cookie;
...@@ -1574,7 +1578,7 @@ void HTTPClient::setCookie(String date, String headerValue) ...@@ -1574,7 +1578,7 @@ void HTTPClient::setCookie(String date, String headerValue)
value = headerValue.substring(pos1, pos2); value = headerValue.substring(pos1, pos2);
else else
value = headerValue.substring(pos1); value = headerValue.substring(pos1);
strptime(value.c_str(), HTTP_TIME_PATTERN, &tm); strptime(value.c_str(), HTTP_TIME_PATTERN, &tm);
cookie.expires.date = mktime(&tm); cookie.expires.date = mktime(&tm);
cookie.expires.valid = true; cookie.expires.valid = true;
...@@ -1589,7 +1593,7 @@ void HTTPClient::setCookie(String date, String headerValue) ...@@ -1589,7 +1593,7 @@ void HTTPClient::setCookie(String date, String headerValue)
value = headerValue.substring(pos1, pos2); value = headerValue.substring(pos1, pos2);
else else
value = headerValue.substring(pos1); value = headerValue.substring(pos1);
cookie.max_age.duration = value.toInt(); cookie.max_age.duration = value.toInt();
cookie.max_age.valid = true; cookie.max_age.valid = true;
} }
...@@ -1639,10 +1643,10 @@ void HTTPClient::setCookie(String date, String headerValue) ...@@ -1639,10 +1643,10 @@ void HTTPClient::setCookie(String date, String headerValue)
// overwrite or delete cookie in/from cookie jar // overwrite or delete cookie in/from cookie jar
time_t now_local = time(NULL); time_t now_local = time(NULL);
time_t now_gmt = mktime(gmtime(&now_local)); time_t now_gmt = mktime(gmtime(&now_local));
bool found = false; bool found = false;
for (auto c = _cookieJar->begin(); c != _cookieJar->end(); ++c) { for (auto c = _cookieJar->begin(); c != _cookieJar->end(); ++c) {
if (c->domain == cookie.domain && c->name == cookie.name) { if (c->domain == cookie.domain && c->name == cookie.name) {
// when evaluating, max-age takes precedence over expires if both are defined // when evaluating, max-age takes precedence over expires if both are defined
if ((cookie.max_age.valid && ((cookie.date + cookie.max_age.duration) < now_gmt)) || cookie.max_age.duration <= 0 if ((cookie.max_age.valid && ((cookie.date + cookie.max_age.duration) < now_gmt)) || cookie.max_age.duration <= 0
...@@ -1670,6 +1674,10 @@ bool HTTPClient::generateCookieString(String *cookieString) ...@@ -1670,6 +1674,10 @@ bool HTTPClient::generateCookieString(String *cookieString)
*cookieString = ""; *cookieString = "";
bool found = false; bool found = false;
if (!_cookieJar)
{
return false;
}
for (auto c = _cookieJar->begin(); c != _cookieJar->end(); ++c) { for (auto c = _cookieJar->begin(); c != _cookieJar->end(); ++c) {
if ((c->max_age.valid && ((c->date + c->max_age.duration) < now_gmt)) || (!c->max_age.valid && c->expires.valid && c->expires.date < now_gmt)) { if ((c->max_age.valid && ((c->date + c->max_age.duration) < now_gmt)) || (!c->max_age.valid && c->expires.valid && c->expires.date < now_gmt)) {
_cookieJar->erase(c); _cookieJar->erase(c);
...@@ -1682,5 +1690,6 @@ bool HTTPClient::generateCookieString(String *cookieString) ...@@ -1682,5 +1690,6 @@ bool HTTPClient::generateCookieString(String *cookieString)
found = true; found = true;
} }
} }
return found; return found;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment