From 8af69f48ad3fc05f3517c17f60f901e1859f4331 Mon Sep 17 00:00:00 2001 From: "Lukas Rieger (Blue)" Date: Tue, 25 Jun 2024 16:07:52 +0200 Subject: [PATCH] Fix typeArguments array not being cloned when resolving ParameterizedType with changed owner --- .../main/java/com/google/gson/internal/$Gson$Types.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gson/src/main/java/com/google/gson/internal/$Gson$Types.java b/gson/src/main/java/com/google/gson/internal/$Gson$Types.java index 6ccdaa3eb5..8bef78afce 100644 --- a/gson/src/main/java/com/google/gson/internal/$Gson$Types.java +++ b/gson/src/main/java/com/google/gson/internal/$Gson$Types.java @@ -392,23 +392,24 @@ private static Type resolve( ParameterizedType original = (ParameterizedType) toResolve; Type ownerType = original.getOwnerType(); Type newOwnerType = resolve(context, contextRawType, ownerType, visitedTypeVariables); - boolean changed = !equal(newOwnerType, ownerType); + boolean ownerChanged = !equal(newOwnerType, ownerType); Type[] args = original.getActualTypeArguments(); + boolean argsChanged = false; for (int t = 0, length = args.length; t < length; t++) { Type resolvedTypeArgument = resolve(context, contextRawType, args[t], visitedTypeVariables); if (!equal(resolvedTypeArgument, args[t])) { - if (!changed) { + if (!argsChanged) { args = args.clone(); - changed = true; + argsChanged = true; } args[t] = resolvedTypeArgument; } } toResolve = - changed + ownerChanged || argsChanged ? newParameterizedTypeWithOwner(newOwnerType, original.getRawType(), args) : original; break;