Module: wine Branch: refs/heads/master Commit: 83c30a55b8beb1f5aa3cc1649ba22af32dcf778d URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=83c30a55b8beb1f5aa3cc164...
Author: Eric Pouech eric.pouech@wanadoo.fr Date: Wed Aug 9 20:53:32 2006 +0200
dbghelp: Made stabs parsing a bit more robust.
Enhance dbghelp's robustness against bogus stabs sections found in meetro.exe (as reported by Jan Zerebecki).
---
dlls/dbghelp/stabs.c | 14 +++++++++----- dlls/dbghelp/symbol.c | 1 + 2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/dlls/dbghelp/stabs.c b/dlls/dbghelp/stabs.c index dd9a70c..e94bd71 100644 --- a/dlls/dbghelp/stabs.c +++ b/dlls/dbghelp/stabs.c @@ -1327,13 +1327,17 @@ #endif stabs_parse_type(ptr)); break; case N_LBRAC: - block = symt_open_func_block(module, curr_func, block, - stab_ptr->n_value, 0); - pending_flush(&pending, module, curr_func, block); + if (curr_func) + { + block = symt_open_func_block(module, curr_func, block, + stab_ptr->n_value, 0); + pending_flush(&pending, module, curr_func, block); + } break; case N_RBRAC: - block = symt_close_func_block(module, curr_func, block, - stab_ptr->n_value); + if (curr_func) + block = symt_close_func_block(module, curr_func, block, + stab_ptr->n_value); break; case N_PSYM: /* These are function parameters. */ diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c index d93bdd2..2354c1a 100644 --- a/dlls/dbghelp/symbol.c +++ b/dlls/dbghelp/symbol.c @@ -365,6 +365,7 @@ struct symt_block* symt_close_func_block struct symt_function* func, struct symt_block* block, unsigned pc) { + assert(func); assert(func->symt.tag == SymTagFunction);
if (pc) block->size = func->address + pc - block->address;