Skip to content

Commit b1f01b0

Browse files
committed
DataConnectCredentialsTokenManager.kt: verify the new state in forceRefresh() to avoid unintentional internal state corruption.
This was suggested by Copilot: #6840 (review)
1 parent 9f3b794 commit b1f01b0

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

firebase-dataconnect/src/main/kotlin/com/google/firebase/dataconnect/core/DataConnectCredentialsTokenManager.kt

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -194,12 +194,23 @@ internal sealed class DataConnectCredentialsTokenManager<T : Any>(
194194
logger.debug { "forceRefresh()" }
195195
val oldState =
196196
state.getAndUpdate { currentState ->
197-
when (currentState) {
198-
is State.Closed -> State.Closed
199-
is State.New -> currentState.copy(forceTokenRefresh = true)
200-
is State.Idle -> currentState.copy(forceTokenRefresh = true)
201-
is State.Active -> State.Idle(currentState.provider, forceTokenRefresh = true)
197+
val newState =
198+
when (currentState) {
199+
is State.Closed -> State.Closed
200+
is State.New -> currentState.copy(forceTokenRefresh = true)
201+
is State.Idle -> currentState.copy(forceTokenRefresh = true)
202+
is State.Active -> State.Idle(currentState.provider, forceTokenRefresh = true)
203+
}
204+
205+
check(newState is State.Closed || newState is State.StateWithForceTokenRefresh<T>) {
206+
"internal error gbazc7qr66: newState should have been Closed or " +
207+
"StateWithForceTokenRefresh, but got: $newState"
208+
}
209+
check((newState as? State.StateWithForceTokenRefresh<T>)?.forceTokenRefresh !== false) {
210+
"internal error fnzwyrsez2: newState.forceTokenRefresh should have been true"
202211
}
212+
213+
newState
203214
}
204215

205216
when (oldState) {

0 commit comments

Comments
 (0)