diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageAddressEditorDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageAddressEditorDialog.java index a1aa583fe8..53a6fbe898 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageAddressEditorDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageAddressEditorDialog.java @@ -32,7 +32,8 @@ import ghidra.app.services.DataTypeManagerService; import ghidra.app.util.datatype.DataTypeSelectionEditor; import ghidra.app.util.datatype.NavigationDirection; import ghidra.program.model.address.Address; -import ghidra.program.model.data.*; +import ghidra.program.model.data.AbstractFloatDataType; +import ghidra.program.model.data.DataType; import ghidra.program.model.lang.Register; import ghidra.program.model.listing.*; import ghidra.util.HelpLocation; @@ -132,12 +133,12 @@ public class StorageAddressEditorDialog extends DialogComponentProvider private void setDataType(DataType dt) { currentDataType = dt; size = dt.getLength(); - boolean unconstrained = (dt instanceof AbstractFloatDataType) || Undefined.isUndefined(dt); + boolean unconstrained = (dt instanceof AbstractFloatDataType) || (dt == DataType.DEFAULT); model.setRequiredSize(size, unconstrained); if (sizeLabel != null) { sizeLabel.setText(Integer.toString(size)); - dataChanged(); } + model.notifyDataChanged(); } private void maybeHandleTabNavigation() { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageAddressModel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageAddressModel.java index 24ddd2bed0..3b833ba13a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageAddressModel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/StorageAddressModel.java @@ -155,7 +155,6 @@ class StorageAddressModel { void notifyDataChanged() { validate(); - SwingUtilities.invokeLater(() -> listener.dataChanged()); } @@ -174,6 +173,7 @@ class StorageAddressModel { } else if (currentSize < requiredSize) { statusText = "Warning: Not enough storage space allocated"; + return false; } else if (currentSize > requiredSize) { statusText = "Warning: Too much storage space allocated"; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/VarnodeTableModel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/VarnodeTableModel.java index 203d9f8120..aebd48c244 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/VarnodeTableModel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/VarnodeTableModel.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -155,7 +155,14 @@ class VarnodeTableModel extends AbstractGTableModel { return; } if (aValue instanceof Address) { - storageModel.setVarnode(varnode, (Address) aValue, varnode.getSize()); + Integer size = varnode.getSize(); + if (size == null) { + size = storageModel.getRequiredSize() - storageModel.getCurrentSize(); + if (size <= 0) { + size = 1; + } + } + storageModel.setVarnode(varnode, (Address) aValue, size); } else if (aValue instanceof Register) { storageModel.setVarnode(varnode, (Register) aValue); @@ -187,6 +194,9 @@ class VarnodeTableModel extends AbstractGTableModel { } Address address = varnode.getAddress(); int size = (Integer) aValue; + if (size <= 0) { + return; + } if (address != null) { Register reg = varnode.getRegister(); if (reg != null && reg.isBigEndian()) {