From bfdcfeb3aae51906273da888f6775c24b434adf9 Mon Sep 17 00:00:00 2001 From: Stefan Kolb Date: Tue, 13 Sep 2016 10:42:00 +0200 Subject: [PATCH 1/3] Fixes #1958: Verbatim URL field is no longer checked for HTML encoded characters by integrity checks --- CHANGELOG.md | 1 + .../jabref/logic/integrity/HTMLCharacterChecker.java | 12 +++++++++--- .../java/net/sf/jabref/model/entry/FieldName.java | 3 --- .../jabref/logic/integrity/IntegrityCheckTest.java | 1 + 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57562154a8f..100359bef3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `# - Fixed [#1949](https://github.com/JabRef/jabref/issues/1949): Error message directs to the wrong preference tab - Fixed InvalidBackgroundColor flickering with Ctrl-s and File > Save database - Fixed loop when pulling changes (shared database) when current selected field has changed +- Fixed [#1958](https://github.com/JabRef/jabref/issues/1958): Verbatim URL field is no longer checked for HTML encoded characters by integrity checks ### Removed - The non-supported feature of being able to define file directories for any extension is removed. Still, it should work for older databases using the legacy `ps` and `pdf` fields, although we strongly encourage using the `file` field. diff --git a/src/main/java/net/sf/jabref/logic/integrity/HTMLCharacterChecker.java b/src/main/java/net/sf/jabref/logic/integrity/HTMLCharacterChecker.java index 8e9a20f288d..d34ad4a05ea 100644 --- a/src/main/java/net/sf/jabref/logic/integrity/HTMLCharacterChecker.java +++ b/src/main/java/net/sf/jabref/logic/integrity/HTMLCharacterChecker.java @@ -9,20 +9,26 @@ import net.sf.jabref.logic.integrity.IntegrityCheck.Checker; import net.sf.jabref.logic.l10n.Localization; import net.sf.jabref.model.entry.BibEntry; +import net.sf.jabref.model.entry.FieldName; public class HTMLCharacterChecker implements Checker { - // Detect any HTML encoded character, private static final Pattern HTML_CHARACTER_PATTERN = Pattern.compile("&[#\\p{Alnum}]+;"); - /** - * Checks, if there are any HTML encoded characters in the fields + * Checks, if there are any HTML encoded characters in the fields. + * + * This check excludes the `url` field as it allows HTML encoded characters. */ @Override public List check(BibEntry entry) { List results = new ArrayList<>(); for (Map.Entry field : entry.getFieldMap().entrySet()) { + // skip verbatim URL field + if (field.getKey().equals(FieldName.URL)) { + continue; + } + Matcher characterMatcher = HTML_CHARACTER_PATTERN.matcher(field.getValue()); if (characterMatcher.find()) { results.add( diff --git a/src/main/java/net/sf/jabref/model/entry/FieldName.java b/src/main/java/net/sf/jabref/model/entry/FieldName.java index c5563bc0381..8f92841fdf4 100644 --- a/src/main/java/net/sf/jabref/model/entry/FieldName.java +++ b/src/main/java/net/sf/jabref/model/entry/FieldName.java @@ -10,7 +10,6 @@ * */ public class FieldName { - // Character separating field names that are to be used in sequence as // fallbacks for a single column (e.g. "author/editor" to use editor where // author is not set): @@ -128,7 +127,6 @@ public class FieldName { // Map to hold alternative display names private static final Map displayNames = new HashMap<>(); - public static String orFields(String... fields) { return String.join(FieldName.FIELD_SEPARATOR, fields); } @@ -149,7 +147,6 @@ public static String orFields(List fields) { displayNames.put(FieldName.URL, "URL"); } - /** * @param field - field to get the display version for * @return A version of the field name more suitable for display diff --git a/src/test/java/net/sf/jabref/logic/integrity/IntegrityCheckTest.java b/src/test/java/net/sf/jabref/logic/integrity/IntegrityCheckTest.java index e3a03fe4648..1d921004879 100644 --- a/src/test/java/net/sf/jabref/logic/integrity/IntegrityCheckTest.java +++ b/src/test/java/net/sf/jabref/logic/integrity/IntegrityCheckTest.java @@ -225,6 +225,7 @@ public void testHTMLCharacterChecks() { assertCorrect(createContext("title", "Not a single {HTML} character")); assertCorrect(createContext("month", "#jan#")); assertCorrect(createContext("author", "A. Einstein and I. Newton")); + assertCorrect(createContext("url", "http://www.thinkmind.org/index.php?view=article&articleid=cloud_computing_2013_1_20_20130")); assertWrong(createContext("author", "Lenhard, Jörg")); assertWrong(createContext("author", "Lenhard, Jãrg")); assertWrong(createContext("journal", "Ärling Ström for – ‱")); From 6799d8eeb2f41e64422a567119be007ea8440182 Mon Sep 17 00:00:00 2001 From: Stefan Kolb Date: Tue, 13 Sep 2016 10:56:06 +0200 Subject: [PATCH 2/3] Exclude all verbatim fields --- CHANGELOG.md | 2 +- .../sf/jabref/logic/integrity/HTMLCharacterChecker.java | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 100359bef3d..cff84bdce1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,7 +56,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `# - Fixed [#1949](https://github.com/JabRef/jabref/issues/1949): Error message directs to the wrong preference tab - Fixed InvalidBackgroundColor flickering with Ctrl-s and File > Save database - Fixed loop when pulling changes (shared database) when current selected field has changed -- Fixed [#1958](https://github.com/JabRef/jabref/issues/1958): Verbatim URL field is no longer checked for HTML encoded characters by integrity checks +- Fixed [#1958](https://github.com/JabRef/jabref/issues/1958): Verbatim fields are no longer checked for HTML encoded characters by integrity checks ### Removed - The non-supported feature of being able to define file directories for any extension is removed. Still, it should work for older databases using the legacy `ps` and `pdf` fields, although we strongly encourage using the `file` field. diff --git a/src/main/java/net/sf/jabref/logic/integrity/HTMLCharacterChecker.java b/src/main/java/net/sf/jabref/logic/integrity/HTMLCharacterChecker.java index d34ad4a05ea..41685930430 100644 --- a/src/main/java/net/sf/jabref/logic/integrity/HTMLCharacterChecker.java +++ b/src/main/java/net/sf/jabref/logic/integrity/HTMLCharacterChecker.java @@ -9,7 +9,8 @@ import net.sf.jabref.logic.integrity.IntegrityCheck.Checker; import net.sf.jabref.logic.l10n.Localization; import net.sf.jabref.model.entry.BibEntry; -import net.sf.jabref.model.entry.FieldName; +import net.sf.jabref.model.entry.FieldProperty; +import net.sf.jabref.model.entry.InternalBibtexFields; public class HTMLCharacterChecker implements Checker { // Detect any HTML encoded character, @@ -24,8 +25,8 @@ public class HTMLCharacterChecker implements Checker { public List check(BibEntry entry) { List results = new ArrayList<>(); for (Map.Entry field : entry.getFieldMap().entrySet()) { - // skip verbatim URL field - if (field.getKey().equals(FieldName.URL)) { + // skip verbatim fields + if (InternalBibtexFields.getFieldProperties(field.getKey()).contains(FieldProperty.VERBATIM)) { continue; } From 63034a84beee2468b65f6c4a1e1b5883f51b5ebe Mon Sep 17 00:00:00 2001 From: Stefan Kolb Date: Tue, 13 Sep 2016 11:11:25 +0200 Subject: [PATCH 3/3] Javadoc --- .../net/sf/jabref/logic/integrity/HTMLCharacterChecker.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/net/sf/jabref/logic/integrity/HTMLCharacterChecker.java b/src/main/java/net/sf/jabref/logic/integrity/HTMLCharacterChecker.java index 41685930430..e9be617944f 100644 --- a/src/main/java/net/sf/jabref/logic/integrity/HTMLCharacterChecker.java +++ b/src/main/java/net/sf/jabref/logic/integrity/HTMLCharacterChecker.java @@ -17,9 +17,7 @@ public class HTMLCharacterChecker implements Checker { private static final Pattern HTML_CHARACTER_PATTERN = Pattern.compile("&[#\\p{Alnum}]+;"); /** - * Checks, if there are any HTML encoded characters in the fields. - * - * This check excludes the `url` field as it allows HTML encoded characters. + * Checks, if there are any HTML encoded characters in nonverbatim fields. */ @Override public List check(BibEntry entry) {