diff options
4 files changed, 29 insertions, 13 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java index 8fcdb4371..df21f713d 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java @@ -25,6 +25,8 @@ import android.widget.ViewFlipper; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicReference; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; @@ -123,6 +125,11 @@ public class GpodnetAuthenticationActivity extends AppCompatActivity { final String usernameStr = username.getText().toString(); final String passwordStr = password.getText().toString(); + if (usernameHasUnwantedChars(usernameStr)) { + txtvError.setText(R.string.gpodnetsync_username_characters_error); + txtvError.setVisibility(View.VISIBLE); + return; + } if (BuildConfig.DEBUG) Log.d(TAG, "Checking login credentials"); AsyncTask<GpodnetService, Void, Void> authTask = new AsyncTask<GpodnetService, Void, Void>() { @@ -395,4 +402,10 @@ public class GpodnetAuthenticationActivity extends AppCompatActivity { finish(); } } + + private boolean usernameHasUnwantedChars(String username) { + Pattern special = Pattern.compile("[!@#$%&*()+=|<>?{}\\[\\]~]"); + Matcher containsUnwantedChars = special.matcher(username); + return containsUnwantedChars.find(); + } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java index 5141e3a78..668f938a0 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java @@ -7,6 +7,7 @@ import org.apache.commons.lang3.StringUtils; import java.text.ParsePosition; import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; @@ -162,11 +163,10 @@ public class DateUtils { if (date == null) { return ""; } + GregorianCalendar now = new GregorianCalendar(); GregorianCalendar cal = new GregorianCalendar(); - cal.add(GregorianCalendar.YEAR, -1); - // some padding, because no one really remembers what day of the month it is - cal.add(GregorianCalendar.DAY_OF_MONTH, 10); - boolean withinLastYear = date.after(cal.getTime()); + cal.setTime(date); + boolean withinLastYear = now.get(Calendar.YEAR) == cal.get(Calendar.YEAR); int format = android.text.format.DateUtils.FORMAT_ABBREV_ALL; if (withinLastYear) { format |= android.text.format.DateUtils.FORMAT_NO_YEAR; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java b/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java index f681b8062..d22d08e09 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java @@ -1,6 +1,10 @@ package de.danoeh.antennapod.core.util.id3reader; import android.util.Log; +import de.danoeh.antennapod.core.feed.Chapter; +import de.danoeh.antennapod.core.feed.ID3Chapter; +import de.danoeh.antennapod.core.util.id3reader.model.FrameHeader; +import de.danoeh.antennapod.core.util.id3reader.model.TagHeader; import java.io.IOException; import java.io.InputStream; @@ -8,11 +12,6 @@ import java.net.URLDecoder; import java.util.ArrayList; import java.util.List; -import de.danoeh.antennapod.core.feed.Chapter; -import de.danoeh.antennapod.core.feed.ID3Chapter; -import de.danoeh.antennapod.core.util.id3reader.model.FrameHeader; -import de.danoeh.antennapod.core.util.id3reader.model.TagHeader; - public class ChapterReader extends ID3Reader { private static final String TAG = "ID3ChapterReader"; @@ -69,11 +68,14 @@ public class ChapterReader extends ID3Reader { int descriptionLength = readString(null, input, header.getSize()); StringBuilder link = new StringBuilder(); readISOString(link, input, header.getSize() - descriptionLength); - String decodedLink = URLDecoder.decode(link.toString(), "UTF-8"); - - currentChapter.setLink(decodedLink); + try { + String decodedLink = URLDecoder.decode(link.toString(), "UTF-8"); + currentChapter.setLink(decodedLink); + Log.d(TAG, "Found link: " + currentChapter.getLink()); + } catch (IllegalArgumentException _iae) { + Log.w(TAG, "Bad URL found in ID3 data"); + } - Log.d(TAG, "Found link: " + currentChapter.getLink()); return ID3Reader.ACTION_DONT_SKIP; } break; diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 4378abe50..2fbb65744 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -642,6 +642,7 @@ <string name="gpodnetsync_error_descr">An error occurred during syncing:\u0020</string> <string name="gpodnetsync_pref_report_successful">Successful</string> <string name="gpodnetsync_pref_report_failed">Failed</string> + <string name="gpodnetsync_username_characters_error">Usernames may only contain letters, digits, hyphens and underscores.</string> <!-- Directory chooser --> <string name="selected_folder_label">Selected folder:</string> |