Skip to content

Commit cff7a1e

Browse files
authored
Merge pull request #6404 from grzesiek2010/COLLECT-6364
Implemented #sanitizedCanonicalPath method
2 parents 9ac6831 + 62e92e2 commit cff7a1e

File tree

16 files changed

+137
-81
lines changed

16 files changed

+137
-81
lines changed

androidshared/src/main/java/org/odk/collect/androidshared/utils/PathUtils.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.odk.collect.androidshared.utils
22

3+
import org.odk.collect.shared.files.FileExt.sanitizedCanonicalPath
34
import timber.log.Timber
45
import java.io.File
56

@@ -9,8 +10,8 @@ object PathUtils {
910
val absoluteFilePath =
1011
if (filePath.startsWith(dirPath)) filePath else dirPath + File.separator + filePath
1112

12-
val canonicalAbsoluteFilePath = File(absoluteFilePath).canonicalPath
13-
val canonicalDirPath = File(dirPath).canonicalPath
13+
val canonicalAbsoluteFilePath = File(absoluteFilePath).sanitizedCanonicalPath()
14+
val canonicalDirPath = File(dirPath).sanitizedCanonicalPath()
1415
if (!canonicalAbsoluteFilePath.startsWith(canonicalDirPath)) {
1516
Timber.e(
1617
"Attempt to access file outside of Collect directory:\n" +

collect_app/src/androidTest/java/org/odk/collect/android/support/rules/ResetStateRule.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import org.odk.collect.androidshared.ui.ToastUtils
1414
import org.odk.collect.androidshared.ui.multiclicksafe.MultiClickGuard
1515
import org.odk.collect.db.sqlite.DatabaseConnection
1616
import org.odk.collect.material.BottomSheetBehavior
17-
import org.odk.collect.shared.files.DirectoryUtils
1817
import java.io.IOException
1918

2019
private class ResetStateStatement(
@@ -43,11 +42,11 @@ private class ResetStateStatement(
4342
private fun clearDisk() {
4443
try {
4544
val internalFilesDir = ApplicationProvider.getApplicationContext<Application>().filesDir
46-
DirectoryUtils.deleteDirectory(internalFilesDir)
45+
internalFilesDir.deleteRecursively()
4746

4847
val externalFilesDir =
4948
ApplicationProvider.getApplicationContext<Application>().getExternalFilesDir(null)!!
50-
DirectoryUtils.deleteDirectory(externalFilesDir)
49+
externalFilesDir.deleteRecursively()
5150
} catch (e: IOException) {
5251
throw RuntimeException(e)
5352
}

collect_app/src/main/java/org/odk/collect/android/application/initialization/ExistingProjectMigrator.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import org.odk.collect.settings.SettingsProvider
1010
import org.odk.collect.settings.importing.ProjectDetailsCreator
1111
import org.odk.collect.settings.keys.MetaKeys
1212
import org.odk.collect.settings.keys.ProjectKeys
13-
import org.odk.collect.shared.files.DirectoryUtils
1413
import org.odk.collect.upgrade.Upgrade
1514
import java.io.File
1615
import java.io.FileNotFoundException
@@ -67,7 +66,7 @@ class ExistingProjectMigrator(
6766
}
6867

6968
try {
70-
DirectoryUtils.deleteDirectory(File(rootDir, ".cache"))
69+
File(rootDir, ".cache").deleteRecursively()
7170
} catch (e: Exception) {
7271
// ignore
7372
}

collect_app/src/main/java/org/odk/collect/android/database/forms/DatabaseFormsRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import org.odk.collect.forms.Form;
3131
import org.odk.collect.forms.FormsRepository;
3232
import org.odk.collect.forms.savepoints.SavepointsRepository;
33-
import org.odk.collect.shared.files.DirectoryUtils;
33+
import org.odk.collect.shared.files.FileExt;
3434
import org.odk.collect.shared.strings.Md5;
3535

3636
import java.io.File;
@@ -302,7 +302,7 @@ private void deleteFilesForForm(Form form) {
302302
File mediaDir = new File(form.getFormMediaPath());
303303

304304
if (mediaDir.isDirectory()) {
305-
DirectoryUtils.deleteDirectory(mediaDir);
305+
FileExt.deleteDirectory(mediaDir);
306306
} else {
307307
mediaDir.delete();
308308
}

collect_app/src/main/java/org/odk/collect/android/database/instances/DatabaseInstancesRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.odk.collect.android.database.DatabaseConstants;
1212
import org.odk.collect.forms.instances.Instance;
1313
import org.odk.collect.forms.instances.InstancesRepository;
14-
import org.odk.collect.shared.files.DirectoryUtils;
14+
import org.odk.collect.shared.files.FileExt;
1515

1616
import java.io.File;
1717
import java.util.ArrayList;
@@ -270,7 +270,7 @@ private void update(Long instanceId, ContentValues values) {
270270
}
271271

272272
private void deleteInstanceFiles(Instance instance) {
273-
DirectoryUtils.deleteDirectory(new File(instance.getInstanceFilePath()).getParentFile());
273+
FileExt.deleteDirectory(new File(instance.getInstanceFilePath()).getParentFile());
274274
}
275275

276276
private static List<Instance> getInstancesFromCursor(Cursor cursor, String instancesPath) {

collect_app/src/main/java/org/odk/collect/android/formmanagement/download/ServerFormDownloader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import org.odk.collect.forms.FormSource;
1717
import org.odk.collect.forms.FormSourceException;
1818
import org.odk.collect.forms.FormsRepository;
19-
import org.odk.collect.shared.files.DirectoryUtils;
19+
import org.odk.collect.shared.files.FileExt;
2020
import org.odk.collect.shared.strings.Md5;
2121

2222
import java.io.File;
@@ -78,7 +78,7 @@ public void downloadForm(ServerFormDetails form, @Nullable ProgressReporter prog
7878
} catch (FormSourceException e) {
7979
throw new FormDownloadException.FormSourceError(e);
8080
} finally {
81-
DirectoryUtils.deleteDirectory(tempDir);
81+
FileExt.deleteDirectory(tempDir);
8282
for (Form formToDelete : preExistingFormsWithSameIdAndVersion) {
8383
formsRepository.delete(formToDelete.getDbId());
8484
}

collect_app/src/main/java/org/odk/collect/android/savepoints/SavepointTask.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import org.odk.collect.async.Scheduler
55
import org.odk.collect.async.SchedulerAsyncTaskMimic
66
import org.odk.collect.forms.savepoints.Savepoint
77
import org.odk.collect.forms.savepoints.SavepointsRepository
8-
import org.odk.collect.shared.files.FileUtils
8+
import org.odk.collect.shared.files.FileExt.saveToFile
99
import timber.log.Timber
1010
import java.io.File
1111

@@ -32,7 +32,7 @@ class SavepointTask(
3232
val savepoint = Savepoint(formDbId, instanceDbId, savepointFile.absolutePath, formController.getInstanceFile()!!.absolutePath)
3333

3434
if (priority == lastPriorityUsed) {
35-
FileUtils.saveToFile(formController.getFilledInFormXml().payloadStream, savepointFile.absolutePath)
35+
savepointFile.saveToFile(formController.getFilledInFormXml().payloadStream)
3636
savepointsRepository.save(savepoint)
3737
}
3838

collect_app/src/main/java/org/odk/collect/android/tasks/SaveFormToDisk.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import org.odk.collect.forms.Form;
6161
import org.odk.collect.forms.instances.Instance;
6262
import org.odk.collect.forms.instances.InstancesRepository;
63+
import org.odk.collect.shared.files.FileExt;
6364

6465
import java.io.File;
6566
import java.io.IOException;
@@ -333,19 +334,17 @@ private Instance exportData(boolean markCompleted, FormSaver.ProgressListener pr
333334

334335
ByteArrayPayload payload = formController.getFilledInFormXml();
335336
// write out xml
336-
String instancePath = formController.getInstanceFile().getAbsolutePath();
337-
338337
for (String fileName : tempFiles) {
339338
mediaUtils.deleteMediaFile(fileName);
340339
}
341340

342341
progressListener.onProgressUpdate(getLocalizedString(Collect.getInstance(), org.odk.collect.strings.R.string.survey_saving_saving_message));
343342

344-
writeFile(payload, instancePath);
343+
writeFile(payload, formController.getInstanceFile());
345344

346345
// Write last-saved instance
347346
String lastSavedPath = formController.getLastSavedPath();
348-
writeFile(payload, lastSavedPath);
347+
writeFile(payload, new File(lastSavedPath));
349348

350349
// update the uri. We have exported the reloadable instance, so update status...
351350
// Since we saved a reloadable instance, it is flagged as re-openable so that if any error
@@ -373,7 +372,7 @@ private Instance exportData(boolean markCompleted, FormSaver.ProgressListener pr
373372
progressListener.onProgressUpdate(
374373
getLocalizedString(Collect.getInstance(), org.odk.collect.strings.R.string.survey_saving_finalizing_message));
375374

376-
writeFile(payload, submissionXml.getAbsolutePath());
375+
writeFile(payload, submissionXml);
377376

378377
// see if the form is encrypted and we can encrypt it...
379378
EncryptedFormInformation formInfo = EncryptionUtils.getEncryptedFormInformation(uri, formController.getSubmissionMetadata());
@@ -486,7 +485,7 @@ public static void manageFilesAfterSavingEncryptedForm(File instanceXml, File su
486485
/**
487486
* Writes payload contents to the disk.
488487
*/
489-
public static void writeFile(ByteArrayPayload payload, String path) throws IOException {
490-
org.odk.collect.shared.files.FileUtils.saveToFile(payload.getPayloadStream(), path);
488+
public static void writeFile(ByteArrayPayload payload, File file) throws IOException {
489+
FileExt.saveToFile(file, payload.getPayloadStream());
491490
}
492491
}

forms-test/src/main/java/org/odk/collect/formstest/InMemFormsRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import org.odk.collect.forms.Form;
66
import org.odk.collect.forms.FormsRepository;
77
import org.odk.collect.forms.savepoints.SavepointsRepository;
8-
import org.odk.collect.shared.files.DirectoryUtils;
8+
import org.odk.collect.shared.files.FileExt;
99
import org.odk.collect.shared.strings.Md5;
1010
import org.odk.collect.shared.TempFiles;
1111

@@ -216,7 +216,7 @@ private void deleteFilesForForm(Form form) {
216216
File mediaDir = new File(form.getFormMediaPath());
217217

218218
if (mediaDir.isDirectory()) {
219-
DirectoryUtils.deleteDirectory(mediaDir);
219+
FileExt.deleteDirectory(mediaDir);
220220
} else {
221221
mediaDir.delete();
222222
}

forms-test/src/main/java/org/odk/collect/formstest/InMemInstancesRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import org.odk.collect.forms.instances.Instance;
44
import org.odk.collect.forms.instances.InstancesRepository;
5-
import org.odk.collect.shared.files.DirectoryUtils;
5+
import org.odk.collect.shared.files.FileExt;
66

77
import java.io.File;
88
import java.util.ArrayList;
@@ -192,7 +192,7 @@ public void removeInstanceById(Long databaseId) {
192192

193193
private void deleteInstanceFiles(Instance instance) {
194194
if (instance.getInstanceFilePath() != null) {
195-
DirectoryUtils.deleteDirectory(new File(instance.getInstanceFilePath()).getParentFile());
195+
FileExt.deleteDirectory(new File(instance.getInstanceFilePath()).getParentFile());
196196
}
197197
}
198198
}

0 commit comments

Comments
 (0)