From 1d68673a9a16eae3e5ffbda3fff2d38dd3b70902 Mon Sep 17 00:00:00 2001 From: ghidra1 Date: Wed, 15 Jul 2020 13:24:59 -0400 Subject: [PATCH] Fix ClassCastException bug when old incompatible option value encountered --- .../framework/options/AbstractOptions.java | 96 ++++++++++++++++--- 1 file changed, 83 insertions(+), 13 deletions(-) diff --git a/Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/AbstractOptions.java b/Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/AbstractOptions.java index cb18b19276..fd5cb08458 100644 --- a/Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/AbstractOptions.java +++ b/Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/AbstractOptions.java @@ -296,86 +296,156 @@ public abstract class AbstractOptions implements Options { public boolean getBoolean(String optionName, boolean defaultValue) { Option option = getOption(optionName, OptionType.BOOLEAN_TYPE, Boolean.valueOf(defaultValue)); - return (Boolean) option.getValue(defaultValue); + try { + return (Boolean) option.getValue(defaultValue); + } + catch (ClassCastException e) { + return defaultValue; + } } @Override public byte[] getByteArray(String optionName, byte[] defaultValue) { Option option = getOption(optionName, OptionType.BYTE_ARRAY_TYPE, defaultValue); - return (byte[]) option.getValue(defaultValue); + try { + return (byte[]) option.getValue(defaultValue); + } + catch (ClassCastException e) { + return defaultValue; + } } @Override public int getInt(String optionName, int defaultValue) { Option option = getOption(optionName, OptionType.INT_TYPE, defaultValue); - return (Integer) option.getValue(defaultValue); + try { + return (Integer) option.getValue(defaultValue); + } + catch (ClassCastException e) { + return defaultValue; + } } @Override public double getDouble(String optionName, double defaultValue) { Option option = getOption(optionName, OptionType.DOUBLE_TYPE, defaultValue); - return (Double) option.getValue(defaultValue); + try { + return (Double) option.getValue(defaultValue); + } + catch (ClassCastException e) { + return defaultValue; + } } @Override public float getFloat(String optionName, float defaultValue) { Option option = getOption(optionName, OptionType.FLOAT_TYPE, defaultValue); - return (Float) option.getValue(defaultValue); + try { + return (Float) option.getValue(defaultValue); + } + catch (ClassCastException e) { + return defaultValue; + } } @Override public long getLong(String optionName, long defaultValue) { Option option = getOption(optionName, OptionType.LONG_TYPE, defaultValue); - return (Long) option.getValue(defaultValue); + try { + return (Long) option.getValue(defaultValue); + } + catch (ClassCastException e) { + return defaultValue; + } } @Override public CustomOption getCustomOption(String optionName, CustomOption defaultValue) { Option option = getOption(optionName, OptionType.CUSTOM_TYPE, defaultValue); - return (CustomOption) option.getValue(defaultValue); + try { + return (CustomOption) option.getValue(defaultValue); + } + catch (ClassCastException e) { + return defaultValue; + } } @Override public Color getColor(String optionName, Color defaultValue) { Option option = getOption(optionName, OptionType.COLOR_TYPE, defaultValue); - return (Color) option.getValue(defaultValue); + try { + return (Color) option.getValue(defaultValue); + } + catch (ClassCastException e) { + return defaultValue; + } } @Override public File getFile(String optionName, File defaultValue) { Option option = getOption(optionName, OptionType.FILE_TYPE, defaultValue); - return (File) option.getValue(defaultValue); + try { + return (File) option.getValue(defaultValue); + } + catch (ClassCastException e) { + return defaultValue; + } } @Override public Font getFont(String optionName, Font defaultValue) { Option option = getOption(optionName, OptionType.FONT_TYPE, defaultValue); + try { return (Font) option.getValue(defaultValue); } + catch (ClassCastException e) { + return defaultValue; + } + } @Override public Date getDate(String optionName, Date defaultValue) { Option option = getOption(optionName, OptionType.DATE_TYPE, defaultValue); - return (Date) option.getValue(defaultValue); + try { + return (Date) option.getValue(defaultValue); + } + catch (ClassCastException e) { + return defaultValue; + } } @Override public KeyStroke getKeyStroke(String optionName, KeyStroke defaultValue) { Option option = getOption(optionName, OptionType.KEYSTROKE_TYPE, defaultValue); - return (KeyStroke) option.getValue(defaultValue); + try { + return (KeyStroke) option.getValue(defaultValue); + } + catch (ClassCastException e) { + return defaultValue; + } } @Override public String getString(String optionName, String defaultValue) { Option option = getOption(optionName, OptionType.STRING_TYPE, defaultValue); - return (String) option.getValue(defaultValue); + try { + return (String) option.getValue(defaultValue); + } + catch (ClassCastException e) { + return defaultValue; + } } @Override @SuppressWarnings("unchecked") public > T getEnum(String optionName, T defaultValue) { Option option = getOption(optionName, OptionType.ENUM_TYPE, defaultValue); - return (T) option.getValue(defaultValue); + try { + return (T) option.getValue(defaultValue); + } + catch (ClassCastException e) { + return defaultValue; + } } @Override