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

tandraschko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/openwebbeans.git


The following commit(s) were added to refs/heads/main by this push:
     new ca7d60a73 OWB-1128 - Event.fire() - the runtime type of the event 
object not validated
ca7d60a73 is described below

commit ca7d60a73109103ef32abfcabaa4b81428bbe2df
Author: tandraschko <[email protected]>
AuthorDate: Wed Apr 15 11:41:56 2026 +0200

    OWB-1128 - Event.fire() - the runtime type of the event object not validated
---
 .../java/org/apache/webbeans/event/EventImpl.java  |  4 +-
 .../org/apache/webbeans/util/WebBeansUtil.java     |  5 ++-
 .../WebBeansUtilValidEventTypeWildcardTest.java    | 51 ++++++++++++++++++++++
 3 files changed, 56 insertions(+), 4 deletions(-)

diff --git 
a/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java 
b/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
index c19c44d1d..a28682253 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
@@ -106,7 +106,7 @@ public class EventImpl<T> implements Event<T>, Serializable
         }
         else
         {
-            
webBeansContext.getWebBeansUtil().validEventType(eventType.getClass(), 
metadata.getType());
+            webBeansContext.getWebBeansUtil().validEventType(eventType, 
metadata.getType());
             doFireSyncEvent(event, metadata.select(eventType));
         }
     }
@@ -123,7 +123,7 @@ public class EventImpl<T> implements Event<T>, Serializable
         Type eventType = event.getClass();
         if (eventType != metadata.validatedType())
         {
-            
webBeansContext.getWebBeansUtil().validEventType(eventType.getClass(), 
metadata.getType());
+            webBeansContext.getWebBeansUtil().validEventType(eventType, 
metadata.getType());
             return webBeansContext.getNotificationManager()
                     .fireEvent(event, metadata.select(eventType), false, 
notificationOptions);
         }
diff --git 
a/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java 
b/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
index 78671354a..53ee8fcd6 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
@@ -48,7 +48,6 @@ import 
org.apache.webbeans.component.creation.ObserverMethodsBuilder;
 import org.apache.webbeans.component.creation.ProducerFieldBeansBuilder;
 import org.apache.webbeans.component.creation.ProducerMethodBeansBuilder;
 import org.apache.webbeans.config.OwbParametrizedTypeImpl;
-import org.apache.webbeans.config.OwbWildcardTypeImpl;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.container.AnnotatedTypeWrapper;
 import org.apache.webbeans.container.InjectionResolver;
@@ -1598,7 +1597,9 @@ public final class WebBeansUtil
             {
                 for (Type t : 
OwbParametrizedTypeImpl.class.cast(et).getActualTypeArguments())
                 {
-                    if (OwbWildcardTypeImpl.class.isInstance(t))
+                    // Wildcards are often fine; throwing on every 
OwbWildcardTypeImpl broke CDI TCK
+                    // wildcard cases (and Enum resolution). Still reject 
loose type variables.
+                    if (TypeVariable.class.isInstance(t))
                     {
                         throw new IllegalArgumentException("TypeVariable 
forbidden for events");
                     }
diff --git 
a/webbeans-impl/src/test/java/org/apache/webbeans/util/WebBeansUtilValidEventTypeWildcardTest.java
 
b/webbeans-impl/src/test/java/org/apache/webbeans/util/WebBeansUtilValidEventTypeWildcardTest.java
new file mode 100644
index 000000000..5c7efed85
--- /dev/null
+++ 
b/webbeans-impl/src/test/java/org/apache/webbeans/util/WebBeansUtilValidEventTypeWildcardTest.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.util;
+
+import jakarta.enterprise.context.ApplicationScoped;
+
+import org.apache.webbeans.test.AbstractUnitTest;
+import org.junit.Test;
+
+/**
+ * {@link WebBeansUtil#validEventType(java.lang.reflect.Type, 
java.lang.reflect.Type)} must not throw
+ * on every {@link org.apache.webbeans.config.OwbWildcardTypeImpl} in resolved 
args (OWB-1128; CDI TCK
+ * {@code ParameterizedEventTest#testWildcardIsResolvable}). {@link Enum} hits 
{@link GenericsUtil}'s
+ * shortcut that adds such a wildcard — the old blanket check failed here.
+ *
+ * @see <a href="https://issues.apache.org/jira/browse/OWB-1128";>OWB-1128</a>
+ */
+public class WebBeansUtilValidEventTypeWildcardTest extends AbstractUnitTest
+{
+
+    @Test
+    public void validEventTypeAcceptsOwbWildcardFromEnumResolution()
+    {
+        startContainer(Sentinel.class);
+
+        final WebBeansUtil util = getWebBeansContext().getWebBeansUtil();
+
+        util.validEventType(Enum.class, Object.class);
+    }
+
+    @ApplicationScoped
+    public static class Sentinel
+    {
+    }
+}

Reply via email to