From 83e67a66dec61cd195e6845df4a78b2437e281f6 Mon Sep 17 00:00:00 2001
From: Arnab Banerjee <a1.banerjee@samsung.corp-partner.google.com>
Date: Fri, 17 May 2024 18:06:45 +0530
Subject: [PATCH] Fix TypedArray instance leak in ParsingPackageUtils.

TypedArray instance was not closed after creation due to recycle method not being invoked. Added recycle call.

Bug: 337976070
FIXES: 337976070
Change-Id: I222e33209e6b66f344e24ae1ca232ca7312da087
---
 .../pm/pkg/parsing/ParsingPackageUtils.java        | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/core/java/com/android/internal/pm/pkg/parsing/ParsingPackageUtils.java b/core/java/com/android/internal/pm/pkg/parsing/ParsingPackageUtils.java
index 9fc7ddb57847..0e5049e97711 100644
--- a/core/java/com/android/internal/pm/pkg/parsing/ParsingPackageUtils.java
+++ b/core/java/com/android/internal/pm/pkg/parsing/ParsingPackageUtils.java
@@ -1911,12 +1911,16 @@ public class ParsingPackageUtils {
             } else if (parser.getName().equals("package")) {
                 final TypedArray sa = res.obtainAttributes(parser,
                         R.styleable.AndroidManifestQueriesPackage);
-                final String packageName = sa.getNonConfigurationString(
-                        R.styleable.AndroidManifestQueriesPackage_name, 0);
-                if (TextUtils.isEmpty(packageName)) {
-                    return input.error("Package name is missing from package tag.");
+                try {
+                    final String packageName = sa.getNonConfigurationString(
+                            R.styleable.AndroidManifestQueriesPackage_name, 0);
+                    if (TextUtils.isEmpty(packageName)) {
+                        return input.error("Package name is missing from package tag.");
+                    }
+                    pkg.addQueriesPackage(packageName.intern());
+                } finally {
+                    sa.recycle();
                 }
-                pkg.addQueriesPackage(packageName.intern());
             } else if (parser.getName().equals("provider")) {
                 final TypedArray sa = res.obtainAttributes(parser,
                         R.styleable.AndroidManifestQueriesProvider);
-- 
GitLab