From af3a6369ccfbeeeeb5e23947a092eff4c7f415e8 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 29 Jul 2014 23:19:54 -0400 Subject: [PATCH] LocalRepoManager: fix null check when copying APKs findbugs found this problem and reported it like this: Nullcheck of org.fdroid.fdroid.data.App.installedApk at line 191 of value previously dereferenced in org.fdroid.fdroid.localrepo.LocalRepoManager.copyApksToRepo(List) A value is checked here to see whether it is null, but this value can't be null because it was previously dereferenced and if it were null a null pointer exception would have occurred at the earlier dereference. Essentially, this code and the previous dereference disagree as to whether this value is allowed to be null. Either the check is redundant or the previous dereference is erroneous. --- .../fdroid/localrepo/LocalRepoManager.java | 42 ++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java b/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java index 5060b388b..f0ff3fe42 100644 --- a/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java +++ b/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java @@ -4,12 +4,15 @@ package org.fdroid.fdroid.localrepo; import android.annotation.TargetApi; import android.content.Context; import android.content.SharedPreferences; -import android.content.pm.*; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.AssetManager; -import android.graphics.*; +import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.Bitmap.Config; +import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.preference.PreferenceManager; @@ -17,15 +20,32 @@ import android.text.TextUtils; import android.util.Log; import android.widget.Toast; -import org.fdroid.fdroid.*; +import org.fdroid.fdroid.Hasher; +import org.fdroid.fdroid.Preferences; +import org.fdroid.fdroid.R; +import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.App; import org.w3c.dom.Document; import org.w3c.dom.Element; -import java.io.*; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; import java.security.cert.CertificateEncodingException; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; import java.util.Map.Entry; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; @@ -187,11 +207,13 @@ public class LocalRepoManager { for (String packageName : appsToCopy) { App app = apps.get(packageName); - File outFile = new File(repoDir, app.installedApk.apkName); - if (app.installedApk == null - || !Utils.symlinkOrCopyFile(app.installedApk.installedFile, outFile)) { - throw new IllegalStateException("Unable to copy APK"); + if (app.installedApk != null) { + File outFile = new File(repoDir, app.installedApk.apkName); + if (Utils.symlinkOrCopyFile(app.installedApk.installedFile, outFile)) + continue; } + // if we got here, something went wrong + throw new IllegalStateException("Unable to copy APK"); } } @@ -246,7 +268,7 @@ public class LocalRepoManager { /** * Extracts the icon from an APK and writes it to the repo as a PNG - * + * * @return path to the PNG file */ public void copyIconToRepo(Drawable drawable, String packageName, int versionCode) {