diff --git a/Source/NSHTTPCookie.m b/Source/NSHTTPCookie.m index 80e301df5..70c17b827 100644 --- a/Source/NSHTTPCookie.m +++ b/Source/NSHTTPCookie.m @@ -745,7 +745,19 @@ GSPropertyListFromCookieFormat(NSString *string, int version) } else { + unsigned int oldpos = pld->pos; + unsigned int keyvalpos = 0; + id keyval = parseUnquotedString(pld, ';'); + keyvalpos = pld->pos; + pld->pos = oldpos; key = parseUnquotedString(pld, '='); + + // Detect value-less cookies like HTTPOnly; and Secure; + if ([keyval length] < [key length]) + { + pld->pos = keyvalpos; + key = keyval; + } } if (key == nil) { diff --git a/Tests/base/NSHTTPCookie/basic.m b/Tests/base/NSHTTPCookie/basic.m index e15451e5b..3c4d4c27f 100644 --- a/Tests/base/NSHTTPCookie/basic.m +++ b/Tests/base/NSHTTPCookie/basic.m @@ -53,6 +53,7 @@ int main() "NSHTTPCookie returns proper value"); PASS([[cookie domain] isEqual: [url host]], "NSHTTPCookie returns proper domain"); + PASS(![cookie isSecure], "Cookie is not secure"); PASS(![cookie isHTTPOnly], "Cookie is not http only"); dict = [NSHTTPCookie requestHeaderFieldsWithCookies: cookies]; @@ -61,9 +62,10 @@ int main() "NSHTTPCookie can generate proper cookie"); dict = [NSDictionary dictionaryWithObject: - @"SessionId=xxx;HttpOnly;" forKey: @"Set-Cookie"]; + @"SessionId=xxx;HttpOnly;Secure;" forKey: @"Set-Cookie"]; cookies= [NSHTTPCookie cookiesWithResponseHeaderFields: dict forURL: url]; cookie = [cookies objectAtIndex:0]; + PASS([cookie isSecure], "NSHTTPCookie is secure"); PASS([cookie isHTTPOnly], "NSHTTPCookie is HTTPOnly"); [arp release]; arp = nil;