clayborg added inline comments.

================
Comment at: lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp:540
+        for (uint32_t i = 0;
+             count > 0 && count <= sizeof(gpr.r) && i < count - 1; ++i) {
           gpr.r[i] = data.GetU32(&offset);
----------------



================
Comment at: lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp:541
+             count > 0 && count <= sizeof(gpr.r) && i < count - 1; ++i) {
           gpr.r[i] = data.GetU32(&offset);
         }
----------------
Just a quick FYI: if the "offset" value ends up being out of bounds for the 
data, it will stop parsing anything and set the offset value to UINT64_MAX, so 
this is safe already.




================
Comment at: lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp:4116
           const char *reexport_name_cstr = strtab_data.PeekCStr(nlist.n_value);
           if (reexport_name_cstr && reexport_name_cstr[0]) {
             type = eSymbolTypeReExported;
----------------



================
Comment at: lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp:4125
+                symbol_name +
+                ((symbol_name && (symbol_name[0] == '_')) ? 1 : 0)));
           } else
----------------
fixathon wrote:
> potential null dereference
Revert, see above code suggestion.


================
Comment at: lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp:6345
                 sizeof(seg_vmaddr.segname));
+        seg_vmaddr.segname[sizeof(seg_vmaddr.segname) - 1] = '\0';
         seg_vmaddr.vmaddr = vmaddr;
----------------
fixathon wrote:
> strncpy may not have null-termination. Please comment if you believe this 
> should not be corrected. I'd like to at least add the comments with 
> sufficient explanation if that is the case.
Need to revert this. If the segment name is actually 16 characters long, you 
will change the segment name which we can't do and there is no NULL termination 
in this case.


================
Comment at: lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp:6737-6738
           // the right one, doesn't need to be nul terminated.
           strncpy(namebuf, lcnote->name.c_str(), sizeof(namebuf));
+          namebuf[sizeof(namebuf) - 1] = '\0';
           buffer.PutRawBytes(namebuf, sizeof(namebuf));
----------------
jasonmolenda wrote:
> fixathon wrote:
> > strncpy may not have null-termination. Please comment if you believe this 
> > should not be corrected. I'd like to at least add the comments with 
> > sufficient explanation if that is the case.
> Same thing here - LC_NOTE name field is char[16] and is not guaranteed to be 
> nul terminated.
Revert this. If the name is actually 16 characters long it isn't supposed to be 
null terminated.


================
Comment at: lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp:6900
 
         offset = entries_fileoff;
         for (uint32_t i = 0; i < imgcount; i++) {
----------------
fixathon wrote:
> offset is re-assigned here, so there's no point in the previous 2 lines. 
> However it is likely those follow the decoding format specification, so left 
> it in as comments for clarity.
Maybe change to something like:
```
// entries_size is not used, nor is the unused entry.
// uint32_t entries_size = m_data.GetU32(&offset);
// uint32_t unused = m_data.GetU32(&offset);
```



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D131554/new/

https://reviews.llvm.org/D131554

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to