From 6cddb3cb1d851319e14b3e32d9b458ca6da1bc5b Mon Sep 17 00:00:00 2001 From: Sahana Bogar Date: Thu, 25 Jun 2026 22:37:28 +0530 Subject: [PATCH] fix swapped constant maps when processing an extended form --- .../org/apache/commons/validator/Form.java | 2 +- .../commons/validator/ExtensionTest.java | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/commons/validator/Form.java b/src/main/java/org/apache/commons/validator/Form.java index 63a6925b7..b18807b52 100644 --- a/src/main/java/org/apache/commons/validator/Form.java +++ b/src/main/java/org/apache/commons/validator/Form.java @@ -221,7 +221,7 @@ protected void process(final Map globalConstants, final Map globalConstants = new HashMap<>(); + globalConstants.put("greeting", "global"); + final Map constants = new HashMap<>(); + constants.put("greeting", "formset"); + + final Field baseField = new Field(); + baseField.setProperty("name"); + baseField.addVar("msg", "${greeting}", null); + + final Form baseForm = new Form(); + baseForm.setName("baseForm"); + baseForm.addField(baseField); + + final Form childForm = new Form(); + childForm.setName("childForm"); + childForm.setExtends("baseForm"); + + final Map forms = new HashMap<>(); + forms.put("baseForm", baseForm); + forms.put("childForm", childForm); + + // Processing the child reaches the still-unprocessed parent through the extension branch of Form.process. + childForm.process(globalConstants, constants, forms); + + assertEquals("formset", baseForm.getField("name").getVar("msg").getValue(), + "the form-set constant should override the global constant for an extended form"); + } + /** * Tests if we can override a rule. We "can" override a rule if the message shown when the firstName required test fails and the lastName test is null. */