On Wed, Dec 16, 2009 at 5:07 PM, Lei Zhang thestig@google.com wrote:
Hi, this is for bug 21045.
+ SecurePackage *prev_package = NULL; LIST_FOR_EACH_ENTRY(package, &packageTable->table, SecurePackage, entry) { + if (prev_package) + HeapFree(GetProcessHeap(), 0, prev_package); + prev_package = package; HeapFree(GetProcessHeap(), 0, package->infoW.Name); HeapFree(GetProcessHeap(), 0, package->infoW.Comment); } + if (prev_package) + HeapFree(GetProcessHeap(), 0, prev_package);
I believe the construct you're looking for is LIST_FOR_EACH_SAFE. grep through the code for examples on using that to safely free and remove elements from a list.
On Wed, Dec 16, 2009 at 5:13 PM, James Hawkins truiken@gmail.com wrote:
On Wed, Dec 16, 2009 at 5:07 PM, Lei Zhang thestig@google.com wrote:
Hi, this is for bug 21045.
- SecurePackage *prev_package = NULL;
LIST_FOR_EACH_ENTRY(package, &packageTable->table, SecurePackage, entry) {
- if (prev_package)
- HeapFree(GetProcessHeap(), 0, prev_package);
- prev_package = package;
HeapFree(GetProcessHeap(), 0, package->infoW.Name); HeapFree(GetProcessHeap(), 0, package->infoW.Comment); }
- if (prev_package)
- HeapFree(GetProcessHeap(), 0, prev_package);
I believe the construct you're looking for is LIST_FOR_EACH_SAFE. grep through the code for examples on using that to safely free and remove elements from a list.
LIST_FOR_EACH_ENTRY_SAFE, actually. Thanks.