From ac7e9a61460554aa0183c677bb15d1f473519f55 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 07 Dec 2012 08:24:43 -0500 Subject: [PATCH] Harden metrics from polluted data (issue-176) --- src/com/gitblit/utils/StringUtils.java | 14 ++++++++++++++ docs/04_releases.mkd | 1 + src/com/gitblit/models/Activity.java | 4 ++-- src/com/gitblit/utils/MetricUtils.java | 1 + src/com/gitblit/wicket/pages/RepositoryPage.java | 2 ++ 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/04_releases.mkd b/docs/04_releases.mkd index 396b255..d42152f 100644 --- a/docs/04_releases.mkd +++ b/docs/04_releases.mkd @@ -12,6 +12,7 @@ #### fixes +- Author metrics can be broken by newlines in email addresses from converted repositories (issue 176) - Set subjectAlternativeName on generated SSL cert if CN is an ip address (issue 170) - Fixed incorrect links on history page for files not in the current/active commit (issue 166) - Empty repository page failed to handle missing repository (issue 160) diff --git a/src/com/gitblit/models/Activity.java b/src/com/gitblit/models/Activity.java index 771c8a1..7e0cb4b 100644 --- a/src/com/gitblit/models/Activity.java +++ b/src/com/gitblit/models/Activity.java @@ -28,6 +28,7 @@ import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.revwalk.RevCommit; +import com.gitblit.utils.StringUtils; import com.gitblit.utils.TimeUtils; /** @@ -93,8 +94,7 @@ } repositoryMetrics.get(repository).count++; - String author = commit.getAuthorIdent().getEmailAddress() - .toLowerCase(); + String author = StringUtils.removeNewlines(commit.getAuthorIdent().getEmailAddress()).toLowerCase(); if (!authorMetrics.containsKey(author)) { authorMetrics.put(author, new Metric(author)); } diff --git a/src/com/gitblit/utils/MetricUtils.java b/src/com/gitblit/utils/MetricUtils.java index e9e1fa5..26e4581 100644 --- a/src/com/gitblit/utils/MetricUtils.java +++ b/src/com/gitblit/utils/MetricUtils.java @@ -210,6 +210,7 @@ p = rev.getAuthorIdent().getEmailAddress().toLowerCase(); } } + p = p.replace('\n',' ').replace('\r', ' ').trim(); if (!metricMap.containsKey(p)) { metricMap.put(p, new Metric(p)); } diff --git a/src/com/gitblit/utils/StringUtils.java b/src/com/gitblit/utils/StringUtils.java index 8684004..86823db 100644 --- a/src/com/gitblit/utils/StringUtils.java +++ b/src/com/gitblit/utils/StringUtils.java @@ -719,4 +719,18 @@ Matcher m = p.matcher(input); return m.matches(); } + + /** + * Removes new line and carriage return chars from a string. + * If input value is null an empty string is returned. + * + * @param input + * @return a sanitized or empty string + */ + public static String removeNewlines(String input) { + if (input == null) { + return ""; + } + return input.replace('\n',' ').replace('\r', ' ').trim(); + } } \ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/RepositoryPage.java b/src/com/gitblit/wicket/pages/RepositoryPage.java index b4e1a0e..897e200 100644 --- a/src/com/gitblit/wicket/pages/RepositoryPage.java +++ b/src/com/gitblit/wicket/pages/RepositoryPage.java @@ -450,6 +450,8 @@ Constants.SearchType searchType) { String name = identity == null ? "" : identity.getName(); String address = identity == null ? "" : identity.getEmailAddress(); + name = StringUtils.removeNewlines(name); + address = StringUtils.removeNewlines(address); boolean showEmail = GitBlit.getBoolean(Keys.web.showEmailAddresses, false); if (!showEmail || StringUtils.isEmpty(name) || StringUtils.isEmpty(address)) { String value = name; -- Gitblit v1.9.1