-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[cookie_manager] Fix FileSystemException
when saving redirect cookies without a proper host
#1948
Conversation
…ctory, errno = 21)`
…ctory, errno = 21)`
…ctory, errno = 21)`
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for fixing and figuring this out. Please add a test for this change, though. Otherwise, it might get broken in the future again.
…th a full Uri for requests that had relative redirects
@ueman I've added a test. |
} | ||
|
||
void main() { | ||
test( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add a test that makes sure non relative redirects aren't modified?
I.e.: a redirect from example.org
to sample.com
should not write a cookie to example.org
.
@kuhnroyal or @AlexV525 do you happen to know whether this is or can be a problem? I'm not really knowledgable in this area.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
I was wondering if this should be resolved from the |
It doesn't look like a problem with the The |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sry for the late review
@@ -123,7 +123,9 @@ class CookieManager extends Interceptor { | |||
// users will be available to handle cookies themselves. | |||
final isRedirectRequest = statusCode >= 300 && statusCode < 400; | |||
// Saving cookies for the original site. | |||
await cookieJar.saveFromResponse(response.realUri, cookies); | |||
final originalUri = response.requestOptions.uri; | |||
final realUri = originalUri.resolveUri(response.realUri); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we have any standards that indicate we should resolve the real dest based on the original one?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://www.rfc-editor.org/rfc/rfc7231#section-7.1.2
The field value consists of a single URI-reference. When it has the
form of a relative reference ([RFC3986], Section 4.2), the final
value is computed by resolving it against the effective request URI
([RFC3986], Section 5).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great. Could you add it as a comment, so we can track it back somedays if we forgot it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Co-authored-by: Alex Li <[email protected]> Signed-off-by: Alex Isaienko <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM after the above comments are resolved
FileSystemException: Cannot open file ... (OS Error: Is a directory, errno = 21)
FileSystemException
when saving redirect cookies without a proper host
Upon relative redirect, cookies were not saved because the
host
was missing.resolveUri
provides the proper host info for a redirect Uri in such cases and doesn't affect others.New Pull Request Checklist
main
branch to avoid conflicts (via merge from master or rebase)CHANGELOG.md
in the corresponding packageAdditional context and info (if any)