From 01d06f97b1207d4f4d72c97e157233ada56bdd8c Mon Sep 17 00:00:00 2001 From: Rafael Winterhalter Date: Mon, 9 Dec 2024 14:44:27 +0100 Subject: [PATCH] Avoid JIT compilation bug in validator. --- .../dynamic/scaffold/TypeWriter.java | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/byte-buddy-dep/src/main/java/net/bytebuddy/dynamic/scaffold/TypeWriter.java b/byte-buddy-dep/src/main/java/net/bytebuddy/dynamic/scaffold/TypeWriter.java index 176ab4684d..bd71bc19c9 100644 --- a/byte-buddy-dep/src/main/java/net/bytebuddy/dynamic/scaffold/TypeWriter.java +++ b/byte-buddy-dep/src/main/java/net/bytebuddy/dynamic/scaffold/TypeWriter.java @@ -2509,26 +2509,25 @@ public FieldVisitor visitField(int modifiers, String name, String descriptor, @M if (!type.isInstance(value)) { throw new IllegalStateException("Field " + name + " defines an incompatible default value " + value + " (" + value.getClass().getName() + ")"); } else if (type == Integer.class) { - char character = descriptor.charAt(0); - int minimum, maximum; - if (character == 'Z') { - minimum = 0; - maximum = 1; - } else if (character == 'B') { - minimum = Byte.MIN_VALUE; - maximum = Byte.MAX_VALUE; - } else if (character == 'S') { - minimum = Short.MIN_VALUE; - maximum = Short.MAX_VALUE; - } else if (character == 'C') { - minimum = Character.MIN_VALUE; - maximum = Character.MAX_VALUE; - } else { - minimum = Integer.MIN_VALUE; - maximum = Integer.MAX_VALUE; + boolean outOfRange; + switch (descriptor.charAt(0)) { + case 'Z': + outOfRange = (Integer) value < 0 || (Integer) value > 1; + break; + case 'B': + outOfRange = (Integer) value < Byte.MIN_VALUE || (Integer) value > Byte.MAX_VALUE; + break; + case 'S': + outOfRange = (Integer) value < Short.MIN_VALUE || (Integer) value > Short.MAX_VALUE; + break; + case 'C': + outOfRange = (Integer) value < Character.MIN_VALUE || (Integer) value > Character.MAX_VALUE; + break; + default: + outOfRange = false; } - if ((Integer) value < minimum || (Integer) value > maximum) { - throw new IllegalStateException("Field " + name + " defines an incompatible default value " + value + " (" + minimum + "-" + maximum + ")"); + if (outOfRange) { + throw new IllegalStateException("Field " + name + " defines an incompatible default value " + value); } } }