paolosev added inline comments.

================
Comment at: lldb/source/Utility/DataExtractor.cpp:914
+/// Extract an unsigned LEB128 number with a specified max value. If the
+/// extracted value exceeds "max_value" the offset will be left unchanged and
+/// llvm::None will be returned.
----------------
labath wrote:
> It doesn't look like this actually happens, does it? (If max_value is 
> exceeded, the offset will still be updated, right?).
> 
> And overall, I am not very happy with backdooring an api inconsistent with 
> the rest of the DataExtractor (I am aware it was clayborg's idea). Overall, 
> it would probably be better to use the llvm DataExtractor class, which has 
> the Cursor interface designed to solve some of the problems you have here (it 
> can handle EOF, it cannot check the uleb magnitude). And it tries to minimize 
> the number of times you need to error check everything. The usage of it could 
> be something like:
> ```
> llvm::DataExtractor llvm_data = lldb_data.GetAsLLVM();
> llvm::DataExtractor::Cursor c(0);
> unsigned id = llvm_data.GetU8(c);
> unsigned payload_len = llvm_data.GetULEB128(c);
> if (!c)
>   return c.takeError();
> // id and payload_len are valid here
> if (id == 0) {
>   unsigned name_len = llvm_data.GetULEB128(c);
>   SmallVector<uint8_t, 32> name_storage;
>   llvm_data.GetU8(c, name_storage, name_len);
>   if (!c)
>     return c.takeError();
>   // name_len and name valid here
>   StringRef name = toStringRef(makeArrayRef(name_storage));
>   unsigned section_length = ...;
>   m_sect_infos.push_back(...)
> }
> ```
> This won't handle the uleb magnitude check, but these checks seem irrelevant 
> and/or subsumable by other, more useful checks: a) Checking the name length 
> is not necessary, as the code will fail for any names longer 1024 anyway (as 
> that's the amount of data you read); b) instead of `section_len < 2^32` it 
> seems more useful to check that `*offset_ptr + section_len` is less than 
> `2^32`, to make sure we don't wrap the `module_id` part of the "address".
Good points! Changed.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D71575



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

Reply via email to