From a6bb3b86034b01bafb3db8f7be826012cf58de6f Mon Sep 17 00:00:00 2001 From: dyrpsf Date: Tue, 6 Jan 2026 19:45:06 +0530 Subject: [PATCH] Fix NPE in AbstractTreeNode clone when userObjects is null --- core/src/org/sbml/jsbml/AbstractTreeNode.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/org/sbml/jsbml/AbstractTreeNode.java b/core/src/org/sbml/jsbml/AbstractTreeNode.java index 63bc6c716..c049c8cc4 100644 --- a/core/src/org/sbml/jsbml/AbstractTreeNode.java +++ b/core/src/org/sbml/jsbml/AbstractTreeNode.java @@ -167,9 +167,10 @@ public AbstractTreeNode(TreeNode node) { AbstractTreeNode anode = (AbstractTreeNode) node; // Do not clone listeners! // this.listOfListeners.addAll(anode.listOfListeners); - if (anode.isSetUserObjects()) { - userObjects = new HashMap(); - userObjects.putAll(anode.userObjects); + // Copy userObjects if present. We must not rely on isSetUserObjects(), + // because subclasses may override it with different semantics. + if (anode.userObjects != null && !anode.userObjects.isEmpty()) { + userObjects = new HashMap(anode.userObjects); } // TODO - add this for all objects when we start using the checkAttribute method for other classes than Compartment.