From d2a85d218b02a2e5a0a016b2785dfc6a1c8e1fc9 Mon Sep 17 00:00:00 2001 From: pgomulka Date: Wed, 7 Oct 2020 08:51:28 +0200 Subject: [PATCH 1/2] Fix XContentTypeTests where version was a negative byte a random byte could be -128 and when used with Math.abs it would result in an int 128. That in turn when casting back to byte would overflow and result in -128 again. Fixed with a randomNonNegativeByte method closes #63342 --- .../elasticsearch/common/xcontent/XContentTypeTests.java | 8 ++++---- .../src/main/java/org/elasticsearch/test/ESTestCase.java | 5 +++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/common/xcontent/XContentTypeTests.java b/server/src/test/java/org/elasticsearch/common/xcontent/XContentTypeTests.java index fa937f84d615c..7b18eaa2bad38 100644 --- a/server/src/test/java/org/elasticsearch/common/xcontent/XContentTypeTests.java +++ b/server/src/test/java/org/elasticsearch/common/xcontent/XContentTypeTests.java @@ -97,7 +97,7 @@ public void testFromRubbish() throws Exception { } public void testVersionedMediaType() { - String version = String.valueOf(Math.abs(randomByte())); + String version = String.valueOf(randomNonNegativeByte()); assertThat(XContentType.fromMediaType("application/vnd.elasticsearch+json;compatible-with=" + version), equalTo(XContentType.JSON)); assertThat(XContentType.fromMediaType("application/vnd.elasticsearch+cbor;compatible-with=" + version), @@ -119,7 +119,7 @@ public void testVersionedMediaType() { } public void testVersionParsing() { - byte version = (byte) Math.abs(randomByte()); + byte version = randomNonNegativeByte(); assertThat(XContentType.parseVersion("application/vnd.elasticsearch+json;compatible-with=" + version), equalTo(version)); assertThat(XContentType.parseVersion("application/vnd.elasticsearch+cbor;compatible-with=" + version), @@ -146,12 +146,12 @@ public void testUnrecognizedParameter() { is(nullValue())); } public void testMediaTypeWithoutESSubtype() { - String version = String.valueOf(Math.abs(randomByte())); + String version = String.valueOf(randomNonNegativeByte()); assertThat(XContentType.fromMediaType("application/json;compatible-with=" + version), nullValue()); } public void testAnchoring() { - String version = String.valueOf(Math.abs(randomByte())); + String version = String.valueOf(randomNonNegativeByte()); assertThat(XContentType.fromMediaType("sth_application/json;compatible-with=" + version + ".0"), nullValue()); assertThat(XContentType.fromMediaType("sth_application/json;compatible-with=" + version + "_sth"), nullValue()); assertThat(XContentType.fromMediaType("application/json;compatible-with=" + version + "_sth"), nullValue()); diff --git a/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java b/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java index 9d81bc7f5725d..b70986ddb7735 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java @@ -607,6 +607,11 @@ public static byte randomByte() { return (byte) random().nextInt(); } + public static byte randomNonNegativeByte() { + byte randomByte = (byte) random().nextInt(); + return (byte) (randomByte == Byte.MIN_VALUE ? 0 : Math.abs(randomByte)); + } + /** * Helper method to create a byte array of a given length populated with random byte values * From be07febedc05bc26a49bab95d693538ebea95430 Mon Sep 17 00:00:00 2001 From: pgomulka Date: Thu, 8 Oct 2020 08:49:37 +0200 Subject: [PATCH 2/2] use rnadomByte() --- .../src/main/java/org/elasticsearch/test/ESTestCase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java b/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java index b70986ddb7735..82d94a24ba461 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/test/ESTestCase.java @@ -608,7 +608,7 @@ public static byte randomByte() { } public static byte randomNonNegativeByte() { - byte randomByte = (byte) random().nextInt(); + byte randomByte = randomByte(); return (byte) (randomByte == Byte.MIN_VALUE ? 0 : Math.abs(randomByte)); }