diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/util/LabelVote.java b/gerrit-server/src/main/java/com/google/gerrit/server/util/LabelVote.java index b5e180df36..a840e87db9 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/util/LabelVote.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/util/LabelVote.java @@ -52,7 +52,7 @@ public abstract class LabelVote { checkArgument(!Strings.isNullOrEmpty(text), "Empty label vote"); int e = text.lastIndexOf('='); checkArgument(e >= 0, "Label vote missing '=': %s", text); - return create(text.substring(0, e), Short.parseShort(text.substring(e + 1), text.length())); + return create(text.substring(0, e), Short.parseShort(text.substring(e + 1))); } public static StringBuilder appendTo(StringBuilder sb, String label, short value) { diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/util/LabelVoteTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/util/LabelVoteTest.java index 0592041c8f..d3cb927ab0 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/util/LabelVoteTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/util/LabelVoteTest.java @@ -15,6 +15,8 @@ package com.google.gerrit.server.util; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import org.junit.Test; @@ -75,6 +77,25 @@ public class LabelVoteTest { l = LabelVote.parseWithEquals("Code-Review=+2"); assertEquals("Code-Review", l.label()); assertEquals((short) 2, l.value()); + l = LabelVote.parseWithEquals("R=0"); + assertEquals("R", l.label()); + assertEquals((short) 0, l.value()); + + String longName = "A-loooooooooooooooooooooooooooooooooooooooooooooooooong-label"; + // Regression test: an old bug passed the string length as a radix to Short#parseShort. + assertTrue(longName.length() > Character.MAX_RADIX); + l = LabelVote.parseWithEquals(longName + "=+1"); + assertEquals(longName, l.label()); + assertEquals((short) 1, l.value()); + + assertParseWithEqualsFails(null); + assertParseWithEqualsFails(""); + assertParseWithEqualsFails("Code-Review"); + assertParseWithEqualsFails("=1"); + assertParseWithEqualsFails("=.1"); + assertParseWithEqualsFails("=a1"); + assertParseWithEqualsFails("=1a"); + assertParseWithEqualsFails("=."); } @Test @@ -85,4 +106,13 @@ public class LabelVoteTest { assertEquals("Code-Review=+1", LabelVote.parseWithEquals("Code-Review=+1").formatWithEquals()); assertEquals("Code-Review=+2", LabelVote.parseWithEquals("Code-Review=+2").formatWithEquals()); } + + private void assertParseWithEqualsFails(String value) { + try { + LabelVote.parseWithEquals(value); + fail("expected IllegalArgumentException when parsing \"" + value + "\""); + } catch (IllegalArgumentException e) { + // Expected. + } + } }