Loading...
mach_o/DwarfDebug.cpp dyld-1340 dyld-1235.2
--- dyld/dyld-1340/mach_o/DwarfDebug.cpp
+++ dyld/dyld-1235.2/mach_o/DwarfDebug.cpp
@@ -251,10 +251,8 @@
             sz = 8;
             break;
         case DW_FORM_string:
-            if ( offset == end )
-                return false;
-            // rdar://124698722 (off-by-one error when decoding DW_FORM_string)
-            offset += strnlen((char*)offset, (end-offset-1)) + 1;
+            while (offset != end && *offset)
+                ++offset;
             return true;
         case DW_FORM_data1:
         case DW_FORM_flag:
@@ -263,7 +261,6 @@
             break;
         case DW_FORM_block:
             sz = read_uleb128(offset, end, malformed);
-            return true; // offset already updated by read_uleb128()
             break;
         case DW_FORM_block1:
             if (offset == end)
@@ -273,15 +270,13 @@
         case DW_FORM_sdata:
         case DW_FORM_udata:
         case DW_FORM_ref_udata:
-            sz = read_uleb128(offset, end, malformed);
-            return true; // offset already updated by read_uleb128()
-            break;
+            read_uleb128(offset, end, malformed);
+            return true;
         case DW_FORM_addrx:
         case DW_FORM_strx:
         case DW_FORM_rnglistx:
             sz = read_uleb128(offset, end, malformed);
-            return true; // offset already updated by read_uleb128()
-            break;
+            return true;
         case DW_FORM_addrx1:
         case DW_FORM_strx1:
             sz = 1;
@@ -307,7 +302,6 @@
             break;
         case DW_FORM_exprloc:
             sz = read_uleb128(offset, end, malformed);
-            return true; // offset already updated by read_uleb128()
             break;
         case DW_FORM_flag_present:
             sz = 0;