From 47f70c0f595864274993401300924347b9307641 Mon Sep 17 00:00:00 2001 From: OHTAKE Tomohiro Date: Wed, 28 Sep 2011 17:29:46 +0900 Subject: [PATCH] [FIXED JENKINS-7725] mailto: links should be absolute URIs --- core/src/main/java/hudson/Functions.java | 4 +- core/src/test/java/hudson/FunctionsTest.java | 56 ++++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 core/src/test/java/hudson/FunctionsTest.java diff --git a/core/src/main/java/hudson/Functions.java b/core/src/main/java/hudson/Functions.java index 741c02fa1e..4ba8aad6cd 100644 --- a/core/src/main/java/hudson/Functions.java +++ b/core/src/main/java/hudson/Functions.java @@ -1169,7 +1169,7 @@ public class Functions { public static String getActionUrl(String itUrl,Action action) { String urlName = action.getUrlName(); if(urlName==null) return null; // to avoid NPE and fail to render the whole page - if(SCHEME.matcher(urlName).matches()) + if(SCHEME.matcher(urlName).find()) return urlName; // absolute URL if(urlName.startsWith("/")) return Stapler.getCurrentRequest().getContextPath()+urlName; @@ -1363,7 +1363,7 @@ public class Functions { return DescriptorVisibilityFilter.apply(context,descriptors); } - private static final Pattern SCHEME = Pattern.compile("[a-z]+://.+"); + private static final Pattern SCHEME = Pattern.compile("^([a-zA-Z][a-zA-Z0-9+.-]*):"); /** * Returns true if we are running unit tests. diff --git a/core/src/test/java/hudson/FunctionsTest.java b/core/src/test/java/hudson/FunctionsTest.java new file mode 100644 index 0000000000..42c57bca81 --- /dev/null +++ b/core/src/test/java/hudson/FunctionsTest.java @@ -0,0 +1,56 @@ +/* + * The MIT License + * + * Copyright 2011, OHTAKE Tomohiro. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package hudson; + +import hudson.model.Action; +import static org.junit.Assert.*; + +import org.junit.Test; +import org.jvnet.hudson.test.Bug; + +public class FunctionsTest { + @Test + @Bug(7725) + public void testGetActionUrl_mailto(){ + String mailto = "mailto:nobody@example.com"; + String result = Functions.getActionUrl(null, new MockAction(mailto)); + assertEquals(mailto, result); + } + + private static final class MockAction implements Action { + private String url; + public MockAction(String url) { + this.url = url; + } + public String getIconFileName() { + throw new UnsupportedOperationException("Not supported yet."); + } + public String getDisplayName() { + throw new UnsupportedOperationException("Not supported yet."); + } + public String getUrlName() { + return url; + } + } +} -- GitLab