[vmkit-commits] [vmkit] r71553 - /vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue May 12 07:04:37 PDT 2009


Author: geoffray
Date: Tue May 12 09:04:15 2009
New Revision: 71553

URL: http://llvm.org/viewvc/llvm-project?rev=71553&view=rev
Log:
Bugfix when parsing a user UTF8.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=71553&r1=71552&r2=71553&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Tue May 12 09:04:15 2009
@@ -399,32 +399,40 @@
   uint32 len = name->size;
   uint32 start = 0;
   uint32 origLen = len;
-  bool doLoop = true;
   
-  while (doLoop) {
+  while (true) {
     --len;
     if (len == 0) {
-      doLoop = false;
+      return 0;
     } else {
       ++start;
       if (name->elements[start] != I_TAB) {
         if (name->elements[start] == I_REF) {
           uint32 size = (uint32)name->size;
-          if ((size == (start + 1)) || (size == (start + 2)) || 
-              (name->elements[start + 1] == I_TAB) || 
+          if ((size == (start + 1)) || (size == (start + 2)) ||
+              (name->elements[start + 1] == I_TAB) ||
               (name->elements[origLen - 1] != I_END_REF)) {
-            doLoop = false; 
+            return 0;
           } else {
             const uint16* buf = &(name->elements[start + 1]);
             uint32 bufLen = len - 2;
             const UTF8* componentName = hashUTF8->lookupReader(buf, bufLen);
             if (!componentName && create) {
-              componentName = name->extract(isolate, start + 1, len - 2);
+              componentName = name->extract(isolate, start + 1,
+                                            start + len - 1);
             }
             return componentName;
           }
         } else {
-          prim = true;
+          uint16 cur = name->elements[start];
+          if ((cur == I_BOOL || cur == I_BYTE ||
+               cur == I_CHAR || cur == I_SHORT ||
+               cur == I_INT || cur == I_FLOAT || 
+               cur == I_DOUBLE || cur == I_LONG)
+              && ((uint32)name->size) == start + 1) {
+            prim = true;
+          }
+          return 0;
         }
       }
     }





More information about the vmkit-commits mailing list