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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7f398f90326 Fix query driver. (#20755)
7f398f90326 is described below

commit 7f398f90326e1bc049e6ee7c994893e4acbea03c
Author: Karan Kumar <[email protected]>
AuthorDate: Wed Oct 28 04:05:06 2026 +0530

    Fix query driver. (#20755)
---
 .../main/java/org/apache/druid/grpc/server/QueryDriver.java    | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git 
a/extensions-contrib/grpc-query/src/main/java/org/apache/druid/grpc/server/QueryDriver.java
 
b/extensions-contrib/grpc-query/src/main/java/org/apache/druid/grpc/server/QueryDriver.java
index cea0241f050..380f1a83731 100644
--- 
a/extensions-contrib/grpc-query/src/main/java/org/apache/druid/grpc/server/QueryDriver.java
+++ 
b/extensions-contrib/grpc-query/src/main/java/org/apache/druid/grpc/server/QueryDriver.java
@@ -748,20 +748,24 @@ public class QueryDriver
   @SuppressWarnings("unchecked")
   private Class<GeneratedMessage> getProtobufClass(final QueryRequest request)
   {
+    final Class<?> clazz;
     try {
-      return (Class<GeneratedMessage>) 
Class.forName(request.getProtobufMessageName());
+      // Class name is client-supplied: load without initializing so no static 
initializer of an arbitrary class runs.
+      clazz = Class.forName(request.getProtobufMessageName(), false, 
QueryDriver.class.getClassLoader());
     }
-    catch (ClassNotFoundException e) {
+    catch (ClassNotFoundException | LinkageError e) {
       throw new RequestError(
           "The Protobuf class [%s] is not known. Is your protobuf jar on the 
class path?",
           request.getProtobufMessageName()
       );
     }
-    catch (ClassCastException e) {
+    // The unchecked cast below never fails at runtime, so the type must be 
checked explicitly.
+    if (!GeneratedMessage.class.isAssignableFrom(clazz)) {
       throw new RequestError(
           "The class [%s] is not a Protobuf",
           request.getProtobufMessageName()
       );
     }
+    return (Class<GeneratedMessage>) clazz;
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to