From 7f6dfb6dfeac24a9de650c98767c61e4ac124a8e Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 30 Mar 2016 15:16:58 +0200 Subject: [PATCH 1/5] remove unused IOException from Downloader.close() method This makes close() easier to use, and the IOException is not used at all. --- app/src/main/java/org/fdroid/fdroid/net/Downloader.java | 2 +- .../main/java/org/fdroid/fdroid/net/LocalFileDownloader.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/net/Downloader.java b/app/src/main/java/org/fdroid/fdroid/net/Downloader.java index e66b793ad..99bf0dd7e 100644 --- a/app/src/main/java/org/fdroid/fdroid/net/Downloader.java +++ b/app/src/main/java/org/fdroid/fdroid/net/Downloader.java @@ -40,7 +40,7 @@ public abstract class Downloader { protected abstract InputStream getDownloadersInputStream() throws IOException; - protected abstract void close() throws IOException; + protected abstract void close(); Downloader(URL url, File destFile) throws FileNotFoundException, MalformedURLException { diff --git a/app/src/main/java/org/fdroid/fdroid/net/LocalFileDownloader.java b/app/src/main/java/org/fdroid/fdroid/net/LocalFileDownloader.java index ecd23ae86..42bd9cb89 100644 --- a/app/src/main/java/org/fdroid/fdroid/net/LocalFileDownloader.java +++ b/app/src/main/java/org/fdroid/fdroid/net/LocalFileDownloader.java @@ -24,8 +24,9 @@ public class LocalFileDownloader extends Downloader { } @Override - protected void close() throws IOException { + protected void close() { // Do nothing. + // TODO this should close the InputStream from getDownloadersInputStream() } @Override From 38680d84e35ec309f1101b639d9854a1c88a44f3 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 30 Mar 2016 16:36:53 +0200 Subject: [PATCH 2/5] update some javadoc --- app/src/main/java/org/fdroid/fdroid/compat/FileCompat.java | 6 ++++++ app/src/main/java/org/fdroid/fdroid/net/Downloader.java | 5 ----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/compat/FileCompat.java b/app/src/main/java/org/fdroid/fdroid/compat/FileCompat.java index aae28192c..4f0031ac7 100644 --- a/app/src/main/java/org/fdroid/fdroid/compat/FileCompat.java +++ b/app/src/main/java/org/fdroid/fdroid/compat/FileCompat.java @@ -11,6 +11,12 @@ import org.fdroid.fdroid.data.SanitizedFile; import java.io.IOException; import java.lang.reflect.Method; +/** + * This class works only with {@link SanitizedFile} instances to enforce + * filtering of the file names from files downloaded from the internet. + * This helps prevent things like SQL injection, shell command injection + * and other attacks based on putting various characters into filenames. + */ public class FileCompat extends Compatibility { private static final String TAG = "FileCompat"; diff --git a/app/src/main/java/org/fdroid/fdroid/net/Downloader.java b/app/src/main/java/org/fdroid/fdroid/net/Downloader.java index 99bf0dd7e..180d3aebd 100644 --- a/app/src/main/java/org/fdroid/fdroid/net/Downloader.java +++ b/app/src/main/java/org/fdroid/fdroid/net/Downloader.java @@ -117,11 +117,6 @@ public abstract class Downloader { } /** - * In a synchronous download (the usual usage of the Downloader interface), - * you will not be able to interrupt this because the thread will block - * after you have called download(). However if you use the AsyncDownloadWrapper, - * then it will use this mechanism to cancel the download. - * * After every network operation that could take a while, we will check if an * interrupt occured during that blocking operation. The goal is to ensure we * don't move onto another slow, network operation if we have cancelled the From c67a60271d3a57cc2a8a61dc245d04271202a2d6 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 30 Mar 2016 20:39:44 +0200 Subject: [PATCH 3/5] fix lint errors: StringFormatInvalid: Invalid format string MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Use a % sign that String.format() recognizes, apparently there are more than one % signs, in Chinese, its big: % * a string in lithuanian forgot the %s --- app/src/main/res/values-fi/strings.xml | 2 +- app/src/main/res/values-lt/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 17e93b7f2..2cc397980 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -108,7 +108,7 @@ Määritä välityspalvelimesi porttinumero (esim. 8118) Yhdessäkään säilössä ei ole pakettipäivityksiä Muut säilöt eivät luoneet virheitä. - Päivityksenaikainen virhe: + Päivityksenaikainen virhe: %s Teema Vahvistamaton Tätä säilöä ei ole vielä käytetty. diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 4c1c23cfb..f97fb6a54 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -63,7 +63,7 @@ Jungiamasi prie %1$s Įjungtose saugyklose nėra nieko naujo - Klaida naujinant: + Klaida naujinant: %s Tema Programų kiekis Aprašymas diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 0a0f0df40..945cfaacb 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -184,7 +184,7 @@ F-Droid已准备好交换应用 触摸可查看详细信息以及允许其他人与你交换应用程序。 - 正在添加 %s 到软件源… + 正在添加 %s 到软件源… 正在写入已签名的索引文件(index.jar)… 创建软件源索引失败! 正在链接APK到软件源…… From c3b47ecd5a380678dd2df3dc2549155429d28514 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 30 Mar 2016 20:45:40 +0200 Subject: [PATCH 4/5] fix lint warning: CommitPrefEdits: use apply() instead of commit() "Consider using apply() instead; commit writes its data to persistent storage immediately, whereas apply will handle it in the background" commit() is only useful if the code actually checks the return value. --- app/src/main/java/org/fdroid/fdroid/Preferences.java | 10 +++++----- app/src/main/java/org/fdroid/fdroid/UpdateService.java | 2 +- .../fdroid/fdroid/views/fragments/AppListFragment.java | 2 +- .../fdroid/views/fragments/AvailableAppsFragment.java | 2 +- .../fdroid/views/fragments/PreferencesFragment.java | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/Preferences.java b/app/src/main/java/org/fdroid/fdroid/Preferences.java index c436694a2..d9243712a 100644 --- a/app/src/main/java/org/fdroid/fdroid/Preferences.java +++ b/app/src/main/java/org/fdroid/fdroid/Preferences.java @@ -40,7 +40,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh if (preferences.getString(PREF_LOCAL_REPO_NAME, null) == null) { preferences.edit() .putString(PREF_LOCAL_REPO_NAME, getDefaultLocalRepoName()) - .commit(); + .apply(); } } @@ -113,7 +113,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh } public void setPrivilegedInstallerEnabled(boolean enable) { - preferences.edit().putBoolean(PREF_PRIVILEGED_INSTALLER, enable).commit(); + preferences.edit().putBoolean(PREF_PRIVILEGED_INSTALLER, enable).apply(); } public boolean isFirstTime() { @@ -121,7 +121,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh } public void setFirstTime(boolean firstTime) { - preferences.edit().putBoolean(PREF_FIRST_TIME, firstTime).commit(); + preferences.edit().putBoolean(PREF_FIRST_TIME, firstTime).apply(); } public boolean isPostPrivilegedInstall() { @@ -129,7 +129,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh } public void setPostPrivilegedInstall(boolean postInstall) { - preferences.edit().putBoolean(PREF_POST_PRIVILEGED_INSTALL, postInstall).commit(); + preferences.edit().putBoolean(PREF_POST_PRIVILEGED_INSTALL, postInstall).apply(); } public boolean shouldCacheApks() { @@ -149,7 +149,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh } public void setShowNfcDuringSwap(boolean show) { - preferences.edit().putBoolean(PREF_SHOW_NFC_DURING_SWAP, show).commit(); + preferences.edit().putBoolean(PREF_SHOW_NFC_DURING_SWAP, show).apply(); } public boolean expertMode() { diff --git a/app/src/main/java/org/fdroid/fdroid/UpdateService.java b/app/src/main/java/org/fdroid/fdroid/UpdateService.java index 927d4783d..407a27078 100644 --- a/app/src/main/java/org/fdroid/fdroid/UpdateService.java +++ b/app/src/main/java/org/fdroid/fdroid/UpdateService.java @@ -406,7 +406,7 @@ public class UpdateService extends IntentService implements ProgressListener { SharedPreferences.Editor e = prefs.edit(); e.putLong(Preferences.PREF_UPD_LAST, System.currentTimeMillis()); - e.commit(); + e.apply(); if (errorRepos == 0) { if (changes) { diff --git a/app/src/main/java/org/fdroid/fdroid/views/fragments/AppListFragment.java b/app/src/main/java/org/fdroid/fdroid/views/fragments/AppListFragment.java index 35918f065..5f326cc4f 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/fragments/AppListFragment.java +++ b/app/src/main/java/org/fdroid/fdroid/views/fragments/AppListFragment.java @@ -141,7 +141,7 @@ public abstract class AppListFragment extends ListFragment implements boolean hasTriedEmptyUpdate = prefs.getBoolean(triedEmptyUpdate, false); if (!hasTriedEmptyUpdate) { Utils.debugLog(TAG, "Empty app list, and we haven't done an update yet. Forcing repo update."); - prefs.edit().putBoolean(triedEmptyUpdate, true).commit(); + prefs.edit().putBoolean(triedEmptyUpdate, true).apply(); UpdateService.updateNow(getActivity()); return true; } diff --git a/app/src/main/java/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java b/app/src/main/java/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java index 24f87f224..f75b6eafd 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java +++ b/app/src/main/java/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java @@ -230,7 +230,7 @@ public class AvailableAppsFragment extends AppListFragment implements Context.MODE_PRIVATE); SharedPreferences.Editor e = p.edit(); e.putString(CATEGORY_KEY, currentCategory); - e.commit(); + e.apply(); } @Override diff --git a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java index c6007348e..f8a40f920 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java +++ b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java @@ -204,13 +204,13 @@ public class PreferencesFragment extends PreferenceFragment // privileged permission are granted, i.e. the extension is installed correctly SharedPreferences.Editor editor = pref.getSharedPreferences().edit(); editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, true); - editor.commit(); + editor.apply(); pref.setChecked(true); } else { // privileged permission not available SharedPreferences.Editor editor = pref.getSharedPreferences().edit(); editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false); - editor.commit(); + editor.apply(); pref.setChecked(false); AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity()); @@ -248,7 +248,7 @@ public class PreferencesFragment extends PreferenceFragment } else { SharedPreferences.Editor editor = pref.getSharedPreferences().edit(); editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false); - editor.commit(); + editor.apply(); pref.setChecked(false); } From 6a1ab2b80ae27d7cb70311098315afb966db20ba Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 30 Mar 2016 21:26:24 +0200 Subject: [PATCH 5/5] make LocalFileDownloader.close() actually close things This doesn't fix the stacktrace but at least it makes this class complete --- .../fdroid/fdroid/net/LocalFileDownloader.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/net/LocalFileDownloader.java b/app/src/main/java/org/fdroid/fdroid/net/LocalFileDownloader.java index 42bd9cb89..7e249040e 100644 --- a/app/src/main/java/org/fdroid/fdroid/net/LocalFileDownloader.java +++ b/app/src/main/java/org/fdroid/fdroid/net/LocalFileDownloader.java @@ -1,5 +1,7 @@ package org.fdroid.fdroid.net; +import org.fdroid.fdroid.Utils; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -10,23 +12,23 @@ import java.net.URL; public class LocalFileDownloader extends Downloader { + private InputStream inputStream; + LocalFileDownloader(URL url, File destFile) throws FileNotFoundException, MalformedURLException { super(url, destFile); } - private File getFileToDownload() { - return new File(sourceUrl.getPath()); - } - @Override protected InputStream getDownloadersInputStream() throws IOException { - return new FileInputStream(getFileToDownload()); + inputStream = new FileInputStream(new File(sourceUrl.getPath())); + return inputStream; } @Override protected void close() { - // Do nothing. - // TODO this should close the InputStream from getDownloadersInputStream() + if (inputStream != null) { + Utils.closeQuietly(inputStream); + } } @Override