* merge.cc (Output_merge_string::do_add_input_section): Correct

scan for number of strings.  Rename vars to avoid shadowing.
	Include missing terminator in input_size_.
This commit is contained in:
Alan Modra 2013-05-03 09:30:24 +00:00
parent 6945071a39
commit f31ae5b84b
2 changed files with 19 additions and 10 deletions

View File

@ -1,3 +1,9 @@
2013-05-03 Alan Modra <amodra@gmail.com>
* merge.cc (Output_merge_string::do_add_input_section): Correct
scan for number of strings. Rename vars to avoid shadowing.
Include missing terminator in input_size_.
2013-05-01 H.J. Lu <hongjiu.lu@intel.com>
* merge.cc (Output_merge_string<Char_type>::do_add_input_section):

View File

@ -505,17 +505,17 @@ bool
Output_merge_string<Char_type>::do_add_input_section(Relobj* object,
unsigned int shndx)
{
section_size_type len;
section_size_type sec_len;
bool is_new;
const unsigned char* pdata = object->decompressed_section_contents(shndx,
&len,
&sec_len,
&is_new);
const Char_type* p = reinterpret_cast<const Char_type*>(pdata);
const Char_type* pend = p + len / sizeof(Char_type);
const Char_type* pend = p + sec_len / sizeof(Char_type);
const Char_type* pend0 = pend;
if (len % sizeof(Char_type) != 0)
if (sec_len % sizeof(Char_type) != 0)
{
object->error(_("mergeable string section length not multiple of "
"character size"));
@ -542,11 +542,14 @@ Output_merge_string<Char_type>::do_add_input_section(Relobj* object,
// Count the number of non-null strings in the section and size the list.
size_t count = 0;
for (const Char_type* pt = p, len = string_length(pt);
pt < pend0;
pt += len + 1)
if (len != 0)
++count;
const Char_type* pt = p;
while (pt < pend0)
{
size_t len = string_length(pt);
if (len != 0)
++count;
pt += len + 1;
}
if (pend0 < pend)
++count;
merged_strings.reserve(count + 1);
@ -595,7 +598,7 @@ Output_merge_string<Char_type>::do_add_input_section(Relobj* object,
merged_strings.push_back(Merged_string(i, 0));
this->input_count_ += count;
this->input_size_ += len;
this->input_size_ += i;
if (has_misaligned_strings)
gold_warning(_("%s: section %s contains incorrectly aligned strings;"