From 53d40d41e85be001f9f01398805594c78f2e9a1f Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Mon, 24 Aug 2026 17:02:49 +0200 Subject: [PATCH 1/2] allow dot character in the revision string fixes #5006 --- .../src/main/java/org/opengrok/indexer/web/Laundromat.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opengrok-indexer/src/main/java/org/opengrok/indexer/web/Laundromat.java b/opengrok-indexer/src/main/java/org/opengrok/indexer/web/Laundromat.java index 29f2e03d39a..7945d55a66b 100644 --- a/opengrok-indexer/src/main/java/org/opengrok/indexer/web/Laundromat.java +++ b/opengrok-indexer/src/main/java/org/opengrok/indexer/web/Laundromat.java @@ -67,10 +67,10 @@ public static String launderServerName(String value) { * (non-logging) processing. The value is assumed to represent a revision string, * not including file path. * @return {@code null} if null or else {@code value} with anything besides - * alphanumeric or {@code :} characters removed. + * alphanumeric or {@code :} or {@code .} characters removed. */ public static String launderRevision(String value) { - return replaceAll(value, "[^a-zA-Z0-9:]", ""); + return replaceAll(value, "[^a-zA-Z0-9:.]", ""); } /** From 06585ed87d8f738fe9f7a631c718774fe6776a3f Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Mon, 24 Aug 2026 17:12:33 +0200 Subject: [PATCH 2/2] add tests, update javadoc --- .../org/opengrok/indexer/web/Laundromat.java | 4 ++-- .../org/opengrok/indexer/web/LaundromatTest.java | 16 +++++++++++++++- .../main/java/org/opengrok/web/PageConfig.java | 5 +++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/opengrok-indexer/src/main/java/org/opengrok/indexer/web/Laundromat.java b/opengrok-indexer/src/main/java/org/opengrok/indexer/web/Laundromat.java index 7945d55a66b..966d198a9e6 100644 --- a/opengrok-indexer/src/main/java/org/opengrok/indexer/web/Laundromat.java +++ b/opengrok-indexer/src/main/java/org/opengrok/indexer/web/Laundromat.java @@ -19,7 +19,7 @@ /* * Copyright (c) 2020, Chris Fraire . - * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2025, 2026, Oracle and/or its affiliates. All rights reserved. */ package org.opengrok.indexer.web; @@ -67,7 +67,7 @@ public static String launderServerName(String value) { * (non-logging) processing. The value is assumed to represent a revision string, * not including file path. * @return {@code null} if null or else {@code value} with anything besides - * alphanumeric or {@code :} or {@code .} characters removed. + * alphanumeric, {@code :}, or {@code .} characters removed. */ public static String launderRevision(String value) { return replaceAll(value, "[^a-zA-Z0-9:.]", ""); diff --git a/opengrok-indexer/src/test/java/org/opengrok/indexer/web/LaundromatTest.java b/opengrok-indexer/src/test/java/org/opengrok/indexer/web/LaundromatTest.java index 5a66755bbc7..9487922891d 100644 --- a/opengrok-indexer/src/test/java/org/opengrok/indexer/web/LaundromatTest.java +++ b/opengrok-indexer/src/test/java/org/opengrok/indexer/web/LaundromatTest.java @@ -19,7 +19,7 @@ /* * Copyright (c) 2020, Chris Fraire . - * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2025, 2026, Oracle and/or its affiliates. All rights reserved. */ package org.opengrok.indexer.web; @@ -70,6 +70,20 @@ void testLaunderServerName(Pair param) { assertEquals(param.getLeft(), Laundromat.launderServerName(param.getRight())); } + private static Stream> getParamsForTestLaunderRevision() { + return Stream.of(Pair.of(null, null), + Pair.of("1.2.3", "1.2.3"), + Pair.of("1:2.3", "1:2.3"), + Pair.of("abc123:.def456", "abc-123:._def/456"), + Pair.of("", "?@#/")); + } + + @ParameterizedTest + @MethodSource("getParamsForTestLaunderRevision") + void testLaunderRevision(Pair param) { + assertEquals(param.getLeft(), Laundromat.launderRevision(param.getRight())); + } + private static Stream> getParamsForTestLaunderUriPath() { return Stream.of(Pair.of("foo", "../../../foo"), Pair.of("/foo/bar", "/foo/../../bar"), diff --git a/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java b/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java index 6fe29b010d4..936d481e81f 100644 --- a/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java +++ b/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java @@ -18,7 +18,7 @@ */ /* - * Copyright (c) 2011, 2025, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2026, Oracle and/or its affiliates. All rights reserved. * Portions Copyright (c) 2011, Jens Elkner. * Portions Copyright (c) 2017, 2020, Chris Fraire . * Portions Copyright (c) 2023, Gino Augustine . @@ -715,7 +715,8 @@ public String getDefineTagsIndex() { /** * Get the revision parameter {@code r} from the request. - * Anything besides alphanumeric and {@code :} is removed via {@link Laundromat#launderInput(String)}. + * Anything besides alphanumeric, {@code :}, or {@code .} is removed via + * {@link Laundromat#launderRevision(String)}. * * @return revision if found, an empty string otherwise. */