From c3891394341c1b90f48544ecec92ef0413a8c01a Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Wed, 8 Jun 2016 07:24:27 -0400 Subject: [PATCH] Handles APKs with missing versionCode/versionName properties - fixes #1264 --- .../brut/androlib/res/xml/ResXmlPatcher.java | 2 +- .../androlib/MissingVersionManifestTest.java | 66 ++++++++++++++++++ .../brut/apktool/issue1264/issue1264.apk | Bin 0 -> 32325 bytes 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 brut.apktool/apktool-lib/src/test/java/brut/androlib/MissingVersionManifestTest.java create mode 100644 brut.apktool/apktool-lib/src/test/resources/brut/apktool/issue1264/issue1264.apk diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlPatcher.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlPatcher.java index 4e989aa1..1b513f62 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlPatcher.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/xml/ResXmlPatcher.java @@ -125,7 +125,7 @@ public final class ResXmlPatcher { * @throws AndrolibException */ public static String pullValueFromStrings(File directory, String key) throws AndrolibException { - if (! key.contains("@")) { + if (key == null || ! key.contains("@")) { return null; } diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/MissingVersionManifestTest.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/MissingVersionManifestTest.java new file mode 100644 index 00000000..16d121f8 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/MissingVersionManifestTest.java @@ -0,0 +1,66 @@ +/** + * Copyright 2014 Ryszard Wiśniewski + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package brut.androlib; + +import brut.androlib.meta.MetaInfo; +import brut.androlib.res.util.ExtFile; +import brut.common.BrutException; +import brut.util.OS; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.util.logging.Logger; + +import static org.junit.Assert.assertEquals; + +/** + * @author Connor Tumbleson + */ +public class MissingVersionManifestTest { + + @BeforeClass + public static void beforeClass() throws Exception, BrutException { + TestUtils.cleanFrameworkFile(); + sTmpDir = new ExtFile(OS.createTempDirectory()); + TestUtils.copyResourceDir(LargeIntsInManifestTest.class, "brut/apktool/issue1264/", sTmpDir); + } + + @AfterClass + public static void afterClass() throws BrutException { + OS.rmdir(sTmpDir); + } + + @Test + public void missingVersionParsesCorrectlyTest() throws BrutException, IOException { + String apk = "issue1264.apk"; + + // decode issue1264.apk + ApkDecoder apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + apk)); + ExtFile decodedApk = new ExtFile(sTmpDir + File.separator + apk + ".out"); + apkDecoder.setOutDir(new File(sTmpDir + File.separator + apk + ".out")); + apkDecoder.decode(); + + MetaInfo metaInfo = new Androlib().readMetaFile(decodedApk); + assertEquals(null, metaInfo.versionInfo.versionName); + } + + private static ExtFile sTmpDir; + + private final static Logger LOGGER = Logger.getLogger(BuildAndDecodeJarTest.class.getName()); +} \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/issue1264/issue1264.apk b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/issue1264/issue1264.apk new file mode 100644 index 0000000000000000000000000000000000000000..e2c4237cbc2219462a2c657dfdcedc7770d5a748 GIT binary patch literal 32325 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