From e8eda1b99fa0a1765e590357e2b0b4d859d4aebc Mon Sep 17 00:00:00 2001 From: Brendt Lucas Date: Sat, 12 Dec 2015 17:40:26 +0000 Subject: [PATCH] Fix AsciiString.contentEqualsIgnoreCase Motivation: Related to issue #4564. AsciiString.contentEqualsIgnoreCase fails when comparing two AsciiStrings of the same length Modifications: Compare the values of the first AsciiString to the second AsciiString Result: AsciiString.contentEqualsIgnoreCase works as expected --- common/src/main/java/io/netty/util/AsciiString.java | 2 +- .../java/io/netty/util/AsciiStringCharacterTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/io/netty/util/AsciiString.java b/common/src/main/java/io/netty/util/AsciiString.java index ceb5bf0ca5..8baf6851c4 100644 --- a/common/src/main/java/io/netty/util/AsciiString.java +++ b/common/src/main/java/io/netty/util/AsciiString.java @@ -530,7 +530,7 @@ public final class AsciiString implements CharSequence, Comparable if (string.getClass() == AsciiString.class) { AsciiString rhs = (AsciiString) string; for (int i = arrayOffset(), j = rhs.arrayOffset(); i < length(); ++i, ++j) { - if (!equalsIgnoreCase(value[i], value[j])) { + if (!equalsIgnoreCase(value[i], rhs.value[j])) { return false; } } diff --git a/common/src/test/java/io/netty/util/AsciiStringCharacterTest.java b/common/src/test/java/io/netty/util/AsciiStringCharacterTest.java index cbec28140d..08f2bab2c2 100644 --- a/common/src/test/java/io/netty/util/AsciiStringCharacterTest.java +++ b/common/src/test/java/io/netty/util/AsciiStringCharacterTest.java @@ -240,6 +240,16 @@ public class AsciiStringCharacterTest { assertThat(AsciiString.contentEqualsIgnoreCase(null, "foo"), is(false)); assertThat(AsciiString.contentEqualsIgnoreCase("bar", null), is(false)); assertThat(AsciiString.contentEqualsIgnoreCase("FoO", "fOo"), is(true)); + + // Test variations (Ascii + String, Ascii + Ascii, String + Ascii) + assertThat(AsciiString.contentEqualsIgnoreCase(new AsciiString("FoO"), "fOo"), is(true)); + assertThat(AsciiString.contentEqualsIgnoreCase(new AsciiString("FoO"), new AsciiString("fOo")), is(true)); + assertThat(AsciiString.contentEqualsIgnoreCase("FoO", new AsciiString("fOo")), is(true)); + + // Test variations (Ascii + String, Ascii + Ascii, String + Ascii) + assertThat(AsciiString.contentEqualsIgnoreCase(new AsciiString("FoO"), "bAr"), is(false)); + assertThat(AsciiString.contentEqualsIgnoreCase(new AsciiString("FoO"), new AsciiString("bAr")), is(false)); + assertThat(AsciiString.contentEqualsIgnoreCase("FoO", new AsciiString("bAr")), is(false)); } @Test