Index: util/mac/mach_o_image_symbol_table_reader.cc |
diff --git a/util/mac/mach_o_image_symbol_table_reader.cc b/util/mac/mach_o_image_symbol_table_reader.cc |
index 51e1261e71c99910c0287bbba2110430deac796a..0b64fd460cf6a929421c1200c085343a4784856a 100644 |
--- a/util/mac/mach_o_image_symbol_table_reader.cc |
+++ b/util/mac/mach_o_image_symbol_table_reader.cc |
@@ -104,6 +104,7 @@ class MachOImageSymbolTableReaderInitializer { |
return false; |
} |
+ scoped_ptr<TaskMemory::MappedMemory> string_table; |
for (size_t symbol_index = 0; symbol_index < symbol_count; ++symbol_index) { |
const process_types::nlist& symbol = symbols[symbol_index]; |
std::string symbol_info = base::StringPrintf(", symbol index %zu%s", |
@@ -121,11 +122,17 @@ class MachOImageSymbolTableReaderInitializer { |
return false; |
} |
+ if (!string_table) { |
+ string_table = process_reader_->Memory()->ReadMapped( |
+ strtab_address, strtab_size); |
+ if (!string_table) { |
+ LOG(WARNING) << "could not read string table" << module_info_; |
+ return false; |
+ } |
+ } |
+ |
std::string name; |
- if (!process_reader_->Memory()->ReadCStringSizeLimited( |
- strtab_address + symbol.n_strx, |
- strtab_size - symbol.n_strx, |
- &name)) { |
+ if (!string_table->ReadCString(symbol.n_strx, &name)) { |
LOG(WARNING) << "could not read string" << symbol_info; |
return false; |
} |