This is an automated email from the ASF dual-hosted git repository.

Aias00 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new c434f4d7da fix(wasm): generate globally unique argument ids by default 
(#7570)
c434f4d7da is described below

commit c434f4d7daeb29315079f5da280fc8057b0ad367
Author: Sean-Walker0 <[email protected]>
AuthorDate: Mon Oct 12 22:49:45 2026 +0800

    fix(wasm): generate globally unique argument ids by default (#7570)
---
 .../handler/AbstractWasmPluginDataHandler.java     |  15 ++++++++++---
 .../handler/AbstractWasmPluginDataHandlerTest.java |  25 +++++++++++++++++++++
 ...ndlerTest$DefaultIdGoWasmPluginDataHandler.wasm | Bin 0 -> 3650 bytes
 3 files changed, 37 insertions(+), 3 deletions(-)

diff --git 
a/shenyu-plugin/shenyu-plugin-wasm-base/src/main/java/org/apache/shenyu/plugin/wasm/base/handler/AbstractWasmPluginDataHandler.java
 
b/shenyu-plugin/shenyu-plugin-wasm-base/src/main/java/org/apache/shenyu/plugin/wasm/base/handler/AbstractWasmPluginDataHandler.java
index 9b2deed8f6..0f38663cb8 100644
--- 
a/shenyu-plugin/shenyu-plugin-wasm-base/src/main/java/org/apache/shenyu/plugin/wasm/base/handler/AbstractWasmPluginDataHandler.java
+++ 
b/shenyu-plugin/shenyu-plugin-wasm-base/src/main/java/org/apache/shenyu/plugin/wasm/base/handler/AbstractWasmPluginDataHandler.java
@@ -25,6 +25,7 @@ import 
org.apache.shenyu.plugin.base.handler.PluginDataHandler;
 import org.apache.shenyu.plugin.wasm.api.loader.WasmLoader;
 
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
@@ -45,11 +46,19 @@ public abstract class AbstractWasmPluginDataHandler extends 
WasmLoader implement
     protected static final String REMOVE_SELECTOR_METHOD_NAME = 
"removeSelector";
     
     protected static final Map<Long, RuleData> RULE_ARGUMENTS = new 
ConcurrentHashMap<>();
+
     
     protected static final String HANDLER_RULE_METHOD_NAME = "handlerRule";
     
     protected static final String REMOVE_RULE_METHOD_NAME = "removeRule";
     
+    /**
+     * Argument ids key the shared static argument maps, and every call 
removes its entry in a
+     * finally block, so ids must be globally unique: overlapping calls with 
equal ids would
+     * overwrite each other's argument and the first cleanup would drop the 
other call's entry.
+     */
+    private static final AtomicLong NEXT_ARGUMENT_ID = new AtomicLong();
+    
     @Override
     public void handlerPlugin(final PluginData pluginData) {
         super.getWasmExtern(HANDLER_PLUGIN_METHOD_NAME)
@@ -129,14 +138,14 @@ public abstract class AbstractWasmPluginDataHandler 
extends WasmLoader implement
     }
     
     protected Long getPluginArgumentId(final PluginData pluginData) {
-        return 0L;
+        return NEXT_ARGUMENT_ID.incrementAndGet();
     }
     
     protected Long getSelectorArgumentId(final SelectorData selectorData) {
-        return 0L;
+        return NEXT_ARGUMENT_ID.incrementAndGet();
     }
     
     protected Long getRuleArgumentId(final RuleData ruleData) {
-        return 0L;
+        return NEXT_ARGUMENT_ID.incrementAndGet();
     }
 }
diff --git 
a/shenyu-plugin/shenyu-plugin-wasm-base/src/test/java/org/apache/shenyu/plugin/wasm/base/handler/AbstractWasmPluginDataHandlerTest.java
 
b/shenyu-plugin/shenyu-plugin-wasm-base/src/test/java/org/apache/shenyu/plugin/wasm/base/handler/AbstractWasmPluginDataHandlerTest.java
index 8dda848f1d..9ad1e48d48 100644
--- 
a/shenyu-plugin/shenyu-plugin-wasm-base/src/test/java/org/apache/shenyu/plugin/wasm/base/handler/AbstractWasmPluginDataHandlerTest.java
+++ 
b/shenyu-plugin/shenyu-plugin-wasm-base/src/test/java/org/apache/shenyu/plugin/wasm/base/handler/AbstractWasmPluginDataHandlerTest.java
@@ -29,7 +29,9 @@ import org.mockito.junit.jupiter.MockitoSettings;
 import org.mockito.quality.Strictness;
 
 import java.nio.charset.StandardCharsets;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -63,6 +65,19 @@ public final class AbstractWasmPluginDataHandlerTest {
         when(ruleData.getPluginName()).thenReturn("SHENYU");
     }
 
+
+    /** Default argument-id generators must never collide. */
+    @Test
+    public void defaultArgumentIdsAreUniqueAcrossTypesAndCalls() {
+        final DefaultIdGoWasmPluginDataHandler handler = new 
DefaultIdGoWasmPluginDataHandler();
+        final Set<Long> ids = new HashSet<>();
+        ids.add(handler.getPluginArgumentId(pluginData));
+        ids.add(handler.getPluginArgumentId(pluginData));
+        ids.add(handler.getSelectorArgumentId(selectorData));
+        ids.add(handler.getRuleArgumentId(ruleData));
+        assertEquals(4, ids.size(), "default argument ids must be unique 
across types and calls");
+    }
+
     /** Go WASM handlerPlugin test. */
     @Test
     public void goHandlerPluginTest() {
@@ -202,6 +217,16 @@ public final class AbstractWasmPluginDataHandlerTest {
         }
     }
 
+
+    /** Loads a copy of the Go fixture but keeps the default argument-id 
generators. */
+    static class DefaultIdGoWasmPluginDataHandler extends 
AbstractWasmPluginDataHandler {
+
+        @Override
+        public String pluginNamed() {
+            return "SHENYU_TEST";
+        }
+    }
+
     /** Loads $TestGoWasmPluginDataHandler.wasm. */
     static class TestGoWasmPluginDataHandler extends WasmTestHandler {
         TestGoWasmPluginDataHandler(final String expected) {
diff --git 
a/shenyu-plugin/shenyu-plugin-wasm-base/src/test/resources/org.apache.shenyu.plugin.wasm.base.handler.AbstractWasmPluginDataHandlerTest$DefaultIdGoWasmPluginDataHandler.wasm
 
b/shenyu-plugin/shenyu-plugin-wasm-base/src/test/resources/org.apache.shenyu.plugin.wasm.base.handler.AbstractWasmPluginDataHandlerTest$DefaultIdGoWasmPluginDataHandler.wasm
new file mode 100644
index 0000000000..1f6f9c6d2c
Binary files /dev/null and 
b/shenyu-plugin/shenyu-plugin-wasm-base/src/test/resources/org.apache.shenyu.plugin.wasm.base.handler.AbstractWasmPluginDataHandlerTest$DefaultIdGoWasmPluginDataHandler.wasm
 differ

Reply via email to