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/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 e66b793ad..180d3aebd 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 { @@ -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 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..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,22 +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() throws IOException { - // Do nothing. + protected void close() { + if (inputStream != null) { + Utils.closeQuietly(inputStream); + } } @Override 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); } 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到软件源……