From 88e8aad0d85b92c6e52cd147f96a58c1ae5c4e10 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Wed, 25 May 2016 10:05:54 -0400 Subject: [PATCH] CSV export: sanitize habit name before creating folder Fix #113 --- .../org/isoron/uhabits/io/HabitsCSVExporter.java | 14 +++++++++++++- .../main/java/org/isoron/uhabits/models/Habit.java | 3 ++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java b/app/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java index f84ad666c..67ddd3a15 100644 --- a/app/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java +++ b/app/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java @@ -19,6 +19,8 @@ package org.isoron.uhabits.io; +import android.support.annotation.NonNull; + import org.isoron.uhabits.helpers.DateHelper; import org.isoron.uhabits.models.CheckmarkList; import org.isoron.uhabits.models.Habit; @@ -64,7 +66,10 @@ public class HabitsCSVExporter for(Habit h : habits) { - String habitDirName = String.format("%03d %s/", h.position + 1, h.name); + String sane = sanitizeFilename(h.name); + String habitDirName = String.format("%03d %s", h.position + 1, sane); + habitDirName = habitDirName.trim() + "/"; + new File(exportDirName + habitDirName).mkdirs(); generateDirs.add(habitDirName); @@ -73,6 +78,13 @@ public class HabitsCSVExporter } } + @NonNull + private String sanitizeFilename(String name) + { + String s = name.replaceAll("[^a-zA-Z0-9\\._-]+", ""); + return s.substring(0, Math.min(s.length(), 100)); + } + private void writeScores(String habitDirName, ScoreList scores) throws IOException { String path = habitDirName + "Scores.csv"; diff --git a/app/src/main/java/org/isoron/uhabits/models/Habit.java b/app/src/main/java/org/isoron/uhabits/models/Habit.java index 1fdb982ad..6973dcc55 100644 --- a/app/src/main/java/org/isoron/uhabits/models/Habit.java +++ b/app/src/main/java/org/isoron/uhabits/models/Habit.java @@ -489,7 +489,7 @@ public class Habit extends Model */ public static void writeCSV(List habits, Writer out) throws IOException { - String header[] = { "Name", "Description", "NumRepetitions", "Interval", "Color" }; + String header[] = { "Position", "Name", "Description", "NumRepetitions", "Interval", "Color" }; CSVWriter csv = new CSVWriter(out); csv.writeNext(header, false); @@ -498,6 +498,7 @@ public class Habit extends Model { String[] cols = { + String.format("%03d", habit.position + 1), habit.name, habit.description, Integer.toString(habit.freqNum),