Mercurial > dovecot > core-2.2
changeset 21739:69f17440719c
lib-oauth2: Don't free oauth2_request too early.
Move the freeing explicitly to only after calling the callback. The
previous method of freeing it on when http_request was destroyed could
have happened too early when oauth2_parse_json() called i_stream_unref(),
which released the last reference to the http_request.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 16 Mar 2017 01:22:09 +0200 |
parents | 29066a72703a |
children | 3ce8158b7fd5 |
files | src/lib-oauth2/oauth2-introspect.c src/lib-oauth2/oauth2-refresh.c src/lib-oauth2/oauth2-token-validate.c |
diffstat | 3 files changed, 3 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-oauth2/oauth2-introspect.c Thu Mar 16 01:12:57 2017 +0200 +++ b/src/lib-oauth2/oauth2-introspect.c Thu Mar 16 01:22:09 2017 +0200 @@ -19,6 +19,7 @@ oauth2_introspection_callback_t *callback = req->is_callback; req->is_callback = NULL; callback(res, req->is_context); + oauth2_request_free_internal(req); } static void @@ -62,7 +63,6 @@ .error = req->delayed_error }; oauth2_introspection_callback(req, &fail); - oauth2_request_free_internal(req); } #undef oauth2_introspection_start @@ -129,7 +129,6 @@ http_client_request_set_timeout_msecs(req->req, req->set->timeout_msecs); - http_client_request_set_destroy_callback(req->req, oauth2_request_free_internal, req); http_client_request_submit(req->req); return req;
--- a/src/lib-oauth2/oauth2-refresh.c Thu Mar 16 01:12:57 2017 +0200 +++ b/src/lib-oauth2/oauth2-refresh.c Thu Mar 16 01:22:09 2017 +0200 @@ -19,6 +19,7 @@ oauth2_refresh_callback_t *callback = req->re_callback; req->re_callback = NULL; callback(res, req->re_context); + oauth2_request_free_internal(req); } static bool @@ -102,7 +103,6 @@ .error = req->delayed_error }; oauth2_refresh_callback(req, &fail); - oauth2_request_free_internal(req); } #undef oauth2_refresh_start @@ -161,7 +161,6 @@ i_stream_unref(&is); http_client_request_set_timeout_msecs(req->req, req->set->timeout_msecs); - http_client_request_set_destroy_callback(req->req, oauth2_request_free_internal, req); http_client_request_submit(req->req); return req;
--- a/src/lib-oauth2/oauth2-token-validate.c Thu Mar 16 01:12:57 2017 +0200 +++ b/src/lib-oauth2/oauth2-token-validate.c Thu Mar 16 01:22:09 2017 +0200 @@ -20,6 +20,7 @@ oauth2_token_validation_callback_t *callback = req->tv_callback; req->tv_callback = NULL; callback(res, req->tv_context); + oauth2_request_free_internal(req); } static void @@ -90,7 +91,6 @@ .error = req->delayed_error }; oauth2_token_validation_callback(req, &fail); - oauth2_request_free_internal(req); } #undef oauth2_token_validation_start @@ -143,7 +143,6 @@ http_client_request_set_timeout_msecs(req->req, req->set->timeout_msecs); - http_client_request_set_destroy_callback(req->req, oauth2_request_free_internal, req); http_client_request_submit(req->req); return req;