From 1cec99e5226136f4ffdb513b42e7c783e2364d4e Mon Sep 17 00:00:00 2001 From: Sjoerd Simons Date: Sat, 22 Apr 2023 14:56:31 +0200 Subject: [PATCH] fix: Ensure the ready inner service is used Cloning the inner service to use in call can mean a not-ready clone gets used which violates the tower service preconditions. Replace the cloned service with the ready service to ensure the right copy gets used. See https://docs.rs/tower/0.4.13/tower/trait.Service.html#be-careful-when-cloning-inner-services for more details Signed-off-by: Sjoerd Simons --- jwt-authorizer/src/layer.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/jwt-authorizer/src/layer.rs b/jwt-authorizer/src/layer.rs index 7bd6397..511fae4 100644 --- a/jwt-authorizer/src/layer.rs +++ b/jwt-authorizer/src/layer.rs @@ -342,6 +342,9 @@ where fn call(&mut self, req: Request) -> Self::Future { let inner = self.inner.clone(); + // take the service that was ready + let inner = std::mem::replace(&mut self.inner, inner); + let auth_fut = self.authorize(req); ResponseFuture {