Avoid indexing std::vector past the end
The code here wants to find address of an element, and often this element is one past the end of std::vector. Dereferencing that element leads to undefined behavior, so it's better to simply use pointer arithmetic instead of taking address of invalid dereference. gdb/ChangeLog: * psymtab.c (recursively_search_psymtabs): Use pointer arithmetic instead of dereferencing std::vector past the end.
This commit is contained in:
parent
cfa27c399e
commit
47fea87745
|
@ -1,3 +1,8 @@
|
||||||
|
2017-12-31 Ruslan Kabatsayev <b7.10110111@gmail.com>
|
||||||
|
|
||||||
|
* psymtab.c (recursively_search_psymtabs): Use pointer arithmetic
|
||||||
|
instead of dereferencing std::vector past the end.
|
||||||
|
|
||||||
2017-12-30 Simon Marchi <simon.marchi@ericsson.com>
|
2017-12-30 Simon Marchi <simon.marchi@ericsson.com>
|
||||||
|
|
||||||
* common/diagnostics.h
|
* common/diagnostics.h
|
||||||
|
|
|
@ -1337,21 +1337,21 @@ recursively_search_psymtabs
|
||||||
}
|
}
|
||||||
|
|
||||||
partial_symbol **gbound
|
partial_symbol **gbound
|
||||||
= &objfile->global_psymbols[ps->globals_offset + ps->n_global_syms];
|
= objfile->global_psymbols.data () + ps->globals_offset + ps->n_global_syms;
|
||||||
partial_symbol **sbound
|
partial_symbol **sbound
|
||||||
= &objfile->static_psymbols[ps->statics_offset + ps->n_static_syms];
|
= objfile->static_psymbols.data () + ps->statics_offset + ps->n_static_syms;
|
||||||
partial_symbol **bound = gbound;
|
partial_symbol **bound = gbound;
|
||||||
|
|
||||||
/* Go through all of the symbols stored in a partial
|
/* Go through all of the symbols stored in a partial
|
||||||
symtab in one loop. */
|
symtab in one loop. */
|
||||||
partial_symbol **psym = &objfile->global_psymbols[ps->globals_offset];
|
partial_symbol **psym = objfile->global_psymbols.data () + ps->globals_offset;
|
||||||
while (keep_going)
|
while (keep_going)
|
||||||
{
|
{
|
||||||
if (psym >= bound)
|
if (psym >= bound)
|
||||||
{
|
{
|
||||||
if (bound == gbound && ps->n_static_syms != 0)
|
if (bound == gbound && ps->n_static_syms != 0)
|
||||||
{
|
{
|
||||||
psym = &objfile->static_psymbols[ps->statics_offset];
|
psym = objfile->static_psymbols.data () + ps->statics_offset;
|
||||||
bound = sbound;
|
bound = sbound;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue