RFR: 8333639: ubsan: cppVtables.cpp:81:55: runtime error: index 14 out of bounds for type 'long int [1]'

Axel Boldt-Christmas aboldtch at openjdk.org
Mon Jun 10 13:20:11 UTC 2024


On Mon, 10 Jun 2024 11:02:19 GMT, Martin Doerr <mdoerr at openjdk.org> wrote:

> We shouldn't specify a wrong array length which causes undefined behavior. Using a "flexible array member".

I thought flexible array members were a C only thing. 

I did something along the lines of this when I was experimenting with UBsan. Not sure if it is any better, but it does not use language extensions. Not sure if it is ok to look beyond the object through a `intptr_t*`. But at least it is not through a `intptr_t[1]`. 


diff --git a/src/hotspot/share/cds/cppVtables.cpp b/src/hotspot/share/cds/cppVtables.cpp
index c339ce9c0de..55332dc484e 100644
--- a/src/hotspot/share/cds/cppVtables.cpp
+++ b/src/hotspot/share/cds/cppVtables.cpp
@@ -66,19 +66,19 @@
 
 class CppVtableInfo {
   intptr_t _vtable_size;
-  intptr_t _cloned_vtable[1];
+  intptr_t _cloned_vtable;
 public:
   static int num_slots(int vtable_size) {
     return 1 + vtable_size; // Need to add the space occupied by _vtable_size;
   }
   int vtable_size()           { return int(uintx(_vtable_size)); }
   void set_vtable_size(int n) { _vtable_size = intptr_t(n); }
-  intptr_t* cloned_vtable()   { return &_cloned_vtable[0]; }
-  void zero()                 { memset(_cloned_vtable, 0, sizeof(intptr_t) * vtable_size()); }
+  intptr_t* cloned_vtable()   { return &_cloned_vtable; }
+  void zero()                 { memset(&_cloned_vtable, 0, sizeof(intptr_t) * vtable_size()); }
   // Returns the address of the next CppVtableInfo that can be placed immediately after this CppVtableInfo
   static size_t byte_size(int vtable_size) {
     CppVtableInfo i;
-    return pointer_delta(&i._cloned_vtable[vtable_size], &i, sizeof(u1));
+    return pointer_delta(&i.cloned_vtable()[vtable_size], &i, sizeof(u1));
   }
 };

-------------

PR Comment: https://git.openjdk.org/jdk/pull/19623#issuecomment-2158353887


More information about the hotspot-runtime-dev mailing list