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

Fly-Style pushed a commit to branch 39.0.0
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/39.0.0 by this push:
     new 86185c8dc0b Fix query driver. (#20755) (#20836)
86185c8dc0b is described below

commit 86185c8dc0b4ea2bbf1efa9e93099ce27f8a861f
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Nov 4 20:37:36 2026 +0200

    Fix query driver. (#20755) (#20836)
    
    (cherry picked from commit 7f398f90326e1bc049e6ee7c994893e4acbea03c)
    
    Co-authored-by: Karan Kumar <[email protected]>
---
 .../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 6720fc61607..cc7227561b2 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
@@ -751,20 +751,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