On Fr, 2006-11-03 at 11:42 -0500, a_villacis@palosanto.com wrote:
Finally, I managed to figure out the proper fix for the crash on regsvr32 msvbvm60.dll
Great! Thanks for your investigation.
I have no Idea about ole, but...
MESSAGE("\thelpstring: %s\n", debugstr_w(pfd->HelpString));
- MESSAGE("\tentry: %s\n", debugstr_w(pfd->Entry));
- if (HIWORD(pfd->Entry) == 0)
MESSAGE("\tentry (ordinal): 0x%04x\n", (INT)pfd->Entry);
- else if (pfd->Entry != (void *)-1)
MESSAGE("\tentry (string): %s\n", debugstr_w(pfd->Entry));
- else
MESSAGE("\tentry (invalid): -1\n");
Pointers with "HIWORD() == 0" are already handled by debugstr_w(). You will get a "#" followed by the number.
I suggest to reuse the old code: MESSAGE("\tentry: %s\n", (entry == -1) ? "-1 (invalid)" : debugstr_w(pfd->Entry));
Another Idea is to check only for "-1" and use the previous code unmodified for all other cases.
--
By by ... Detlef
New version of the patch, with suggested changes.
Changelog: * Fix regression on MSFT typelib parsing of function records by allocating a string copy only when indicated by FKCCIC flag, and preserving the meaning of value as function ordinal otherwise.
Alex Villacís Lasso