Try avoid letting people use stupid values for numbers. Fixes #635
This commit is contained in:
		| @@ -17,7 +17,13 @@ public class ParamInfoDouble extends ParamInfo { | ||||
|  | ||||
|     @Override | ||||
|     protected Object fromString(String string) { | ||||
|         return Double.parseDouble(string); | ||||
|         double result = Double.parseDouble(string); | ||||
|  | ||||
|         if (!Double.isFinite(result) || Math.abs(result) > 999_999_999) { | ||||
|             throw new NumberFormatException("For input string: \"" + string + "\""); | ||||
|         } | ||||
|  | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -7,12 +7,22 @@ import me.libraryaddict.disguise.utilities.params.ParamInfo; | ||||
|  */ | ||||
| public class ParamInfoFloat extends ParamInfo { | ||||
|     public ParamInfoFloat(String name, String description) { | ||||
|         super(float.class, name, description); | ||||
|         this(float.class, name, description); | ||||
|     } | ||||
|  | ||||
|     public ParamInfoFloat(Class cl, String name, String description) { | ||||
|         super(cl, name, description); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected Object fromString(String string) { | ||||
|         return Float.parseFloat(string); | ||||
|         float result = Float.parseFloat(string); | ||||
|  | ||||
|         if (!Float.isFinite(result) || Math.abs(result) > 999_999_999) { | ||||
|             throw new NumberFormatException("For input string: \"" + string + "\""); | ||||
|         } | ||||
|  | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import me.libraryaddict.disguise.utilities.params.ParamInfo; | ||||
| /** | ||||
|  * Created by libraryaddict on 7/09/2018. | ||||
|  */ | ||||
| public class ParamInfoFloatNullable extends ParamInfo { | ||||
| public class ParamInfoFloatNullable extends ParamInfoFloat { | ||||
|     public ParamInfoFloatNullable(String name, String description) { | ||||
|         super(Float.class, name, description); | ||||
|     } | ||||
| @@ -16,7 +16,7 @@ public class ParamInfoFloatNullable extends ParamInfo { | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         return Float.parseFloat(string); | ||||
|         return super.fromString(string); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -143,6 +143,11 @@ public class ParamInfoParticle extends ParamInfoEnum { | ||||
|                     throw new DisguiseParseException(LibsMsg.PARSE_PARTICLE_REDSTONE, particle.name(), string); | ||||
|                 } else { | ||||
|                     size = Math.max(0.2f, Float.parseFloat(split[split.length - 1])); | ||||
|  | ||||
|                     // Stupid high cap | ||||
|                     if (size > 100) { | ||||
|                         size = 100; | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 data = new Particle.DustOptions(color, size); | ||||
|   | ||||
| @@ -108,14 +108,14 @@ public class DisguiseParser { | ||||
|                     } | ||||
|  | ||||
|                     if (getMethod == null) { | ||||
|                         DisguiseUtilities.getLogger().severe(String | ||||
|                                 .format("No such method '%s' when looking for the companion of '%s' in '%s'", getName, setMethod.getName(), | ||||
|                                         setMethod.getWatcherClass().getSimpleName())); | ||||
|                         DisguiseUtilities.getLogger().severe( | ||||
|                             String.format("No such method '%s' when looking for the companion of '%s' in '%s'", getName, setMethod.getName(), | ||||
|                                 setMethod.getWatcherClass().getSimpleName())); | ||||
|                         continue; | ||||
|                     } else if (getMethod.getReturnType() != setMethod.getParam()) { | ||||
|                         DisguiseUtilities.getLogger().severe(String | ||||
|                                 .format("Invalid return type of '%s' when looking for the companion of '%s' in '%s'", getName, setMethod.getName(), | ||||
|                                         setMethod.getWatcherClass().getSimpleName())); | ||||
|                         DisguiseUtilities.getLogger().severe( | ||||
|                             String.format("Invalid return type of '%s' when looking for the companion of '%s' in '%s'", getName, setMethod.getName(), | ||||
|                                 setMethod.getWatcherClass().getSimpleName())); | ||||
|                         continue; | ||||
|                     } | ||||
|  | ||||
| @@ -175,7 +175,7 @@ public class DisguiseParser { | ||||
|                 // Special handling for this method | ||||
|                 if (m.getName().equals("addPotionEffect")) { | ||||
|                     MethodHandle getPotion = | ||||
|                             MethodHandles.publicLookup().bind(disguise.getWatcher(), "getPotionEffects", MethodType.methodType(PotionEffectType[].class)); | ||||
|                         MethodHandles.publicLookup().bind(disguise.getWatcher(), "getPotionEffects", MethodType.methodType(PotionEffectType[].class)); | ||||
|                     PotionEffectType[] types = (PotionEffectType[]) getPotion.invoke(); | ||||
|  | ||||
|                     for (PotionEffectType type : types) { | ||||
| @@ -267,7 +267,7 @@ public class DisguiseParser { | ||||
|                         serializedMeta.put(entry.getKey(), val.getClass().getName() + ":" + serialized); | ||||
|                     } catch (Throwable throwable) { | ||||
|                         DisguiseUtilities.getLogger() | ||||
|                                 .warning("Unable to properly serialize the metadata on a disguise, the metadata was saved under name '" + entry.getKey() + "'"); | ||||
|                             .warning("Unable to properly serialize the metadata on a disguise, the metadata was saved under name '" + entry.getKey() + "'"); | ||||
|  | ||||
|                         if (!(throwable instanceof StackOverflowError)) { | ||||
|                             throwable.printStackTrace(); | ||||
| @@ -297,9 +297,8 @@ public class DisguiseParser { | ||||
|  | ||||
|             if (!Objects.deepEquals(dObj, object)) { | ||||
|                 throw new IllegalStateException(String.format( | ||||
|                         "%s has conflicting values in class %s! This means it expected the same value again but " + "received a " + | ||||
|                                 "different value on a different disguise! %s is not the same as %s!", setMethod.toString(), setMethod.toString(), object, | ||||
|                         dObj)); | ||||
|                     "%s has conflicting values in class %s! This means it expected the same value again but " + "received a " + | ||||
|                         "different value on a different disguise! %s is not the same as %s!", setMethod.toString(), setMethod.toString(), object, dObj)); | ||||
|             } | ||||
|  | ||||
|             return; | ||||
| @@ -311,7 +310,7 @@ public class DisguiseParser { | ||||
|     } | ||||
|  | ||||
|     private static void doCheck(CommandSender sender, DisguisePermissions permissions, DisguisePerm disguisePerm, Collection<String> usedOptions) | ||||
|             throws DisguiseParseException { | ||||
|         throws DisguiseParseException { | ||||
|  | ||||
|         if (!permissions.isAllowedDisguise(disguisePerm, usedOptions)) { | ||||
|             throw new DisguiseParseException(LibsMsg.D_PARSE_NOPERM, usedOptions.stream().reduce((first, second) -> second).orElse(null)); | ||||
| @@ -416,15 +415,6 @@ public class DisguiseParser { | ||||
|         return new DisguisePermissions(sender, commandName); | ||||
|     } | ||||
|  | ||||
|     private static boolean isDouble(String string) { | ||||
|         try { | ||||
|             Float.parseFloat(string); | ||||
|             return true; | ||||
|         } catch (Exception ex) { | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static boolean isInteger(String string) { | ||||
|         try { | ||||
|             Integer.parseInt(string); | ||||
| @@ -496,7 +486,7 @@ public class DisguiseParser { | ||||
|  | ||||
|     public static String[] parsePlaceholders(String[] args, CommandSender user, CommandSender target) { | ||||
|         return parsePlaceholders(args, getName(user), DisguiseUtilities.getDisplayName(user), getSkin(user), getName(target), | ||||
|                 DisguiseUtilities.getDisplayName(target), DisguiseParser.getSkin(target), getEntityEquipment(user), getEntityEquipment(target)); | ||||
|             DisguiseUtilities.getDisplayName(target), DisguiseParser.getSkin(target), getEntityEquipment(user), getEntityEquipment(target)); | ||||
|     } | ||||
|  | ||||
|     private static EntityEquipment getEntityEquipment(CommandSender entity) { | ||||
| @@ -647,7 +637,7 @@ public class DisguiseParser { | ||||
|         } | ||||
|  | ||||
|         DisguiseParser.callMethods(Bukkit.getConsoleSender(), disguise, new DisguisePermissions(Bukkit.getConsoleSender(), "disguise"), | ||||
|                 new DisguisePerm(disguise.getType()), new ArrayList<>(), params, "Disguise"); | ||||
|             new DisguisePerm(disguise.getType()), new ArrayList<>(), params, "Disguise"); | ||||
|     } | ||||
|  | ||||
|     public static void modifyDisguise(Disguise disguise, String[] params) throws Throwable { | ||||
| @@ -677,7 +667,7 @@ public class DisguiseParser { | ||||
|      * disguise has been feed a proper disguisetype. | ||||
|      */ | ||||
|     public static Disguise parseDisguise(CommandSender sender, Entity target, String permNode, String[] args, DisguisePermissions permissions) | ||||
|             throws Throwable { | ||||
|         throws Throwable { | ||||
|         if (!Bukkit.isPrimaryThread()) { | ||||
|             throw new IllegalStateException("DisguiseParser should not be called async!"); | ||||
|         } | ||||
| @@ -809,7 +799,7 @@ public class DisguiseParser { | ||||
|                         boolean adult = true; | ||||
|  | ||||
|                         if (args[1].equalsIgnoreCase(TranslateType.DISGUISE_OPTIONS.get("baby")) || | ||||
|                                 args[1].equalsIgnoreCase(TranslateType.DISGUISE_OPTIONS.get("adult"))) { | ||||
|                             args[1].equalsIgnoreCase(TranslateType.DISGUISE_OPTIONS.get("adult"))) { | ||||
|                             usedOptions.add("setbaby"); | ||||
|                             doCheck(sender, permissions, disguisePerm, usedOptions); | ||||
|                             adult = args[1].equalsIgnoreCase(TranslateType.DISGUISE_OPTIONS.get("adult")); | ||||
| @@ -1006,8 +996,8 @@ public class DisguiseParser { | ||||
|                     parseException = ex; | ||||
|                 } catch (Exception ignored) { | ||||
|                     parseException = | ||||
|                             new DisguiseParseException(LibsMsg.PARSE_EXPECTED_RECEIVED, paramInfo.getDescriptiveName(), list.isEmpty() ? null : list.get(0), | ||||
|                                     TranslateType.DISGUISE_OPTIONS.reverseGet(method.getName())); | ||||
|                         new DisguiseParseException(LibsMsg.PARSE_EXPECTED_RECEIVED, paramInfo.getDescriptiveName(), list.isEmpty() ? null : list.get(0), | ||||
|                             TranslateType.DISGUISE_OPTIONS.reverseGet(method.getName())); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
| @@ -1034,8 +1024,8 @@ public class DisguiseParser { | ||||
|             } | ||||
|  | ||||
|             if (DisguiseConfig.isArmorstandsName() && ((methodToUse.getName().equals("setName") && disguise.isPlayerDisguise()) || | ||||
|                     (DisguiseConfig.isOverrideCustomNames() && methodToUse.getName().equals("setCustomName"))) && | ||||
|                     !sender.hasPermission("libsdisguises.multiname")) { | ||||
|                 (DisguiseConfig.isOverrideCustomNames() && methodToUse.getName().equals("setCustomName"))) && | ||||
|                 !sender.hasPermission("libsdisguises.multiname")) { | ||||
|                 valueToSet = DisguiseUtilities.quoteNewLine((String) valueToSet); | ||||
|             } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user