* grub-core/fs/fshelp.c (find_file): Set oldnode to zero after

freeing it.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2013-02-01 21:51:09 +01:00
parent 66a93674b2
commit 3f078c0fca
2 changed files with 12 additions and 1 deletions

View file

@ -1,3 +1,8 @@
2013-02-01 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/fs/fshelp.c (find_file): Set oldnode to zero after
freeing it.
2013-02-01 Vladimir Serbinenko <phcoder@gmail.com> 2013-02-01 Vladimir Serbinenko <phcoder@gmail.com>
Implement USBDebug (full USB stack variant). Implement USBDebug (full USB stack variant).

View file

@ -147,6 +147,7 @@ find_file (const char *currpath, grub_fshelp_node_t currroot,
free_node (ctx->currnode, ctx); free_node (ctx->currnode, ctx);
free_node (ctx->oldnode, ctx); free_node (ctx->oldnode, ctx);
ctx->currnode = 0; ctx->currnode = 0;
ctx->oldnode = 0;
return grub_error (GRUB_ERR_SYMLINK_LOOP, return grub_error (GRUB_ERR_SYMLINK_LOOP,
N_("too deep nesting of symlinks")); N_("too deep nesting of symlinks"));
} }
@ -158,6 +159,7 @@ find_file (const char *currpath, grub_fshelp_node_t currroot,
if (!symlink) if (!symlink)
{ {
free_node (ctx->oldnode, ctx); free_node (ctx->oldnode, ctx);
ctx->oldnode = 0;
return grub_errno; return grub_errno;
} }
@ -177,12 +179,16 @@ find_file (const char *currpath, grub_fshelp_node_t currroot,
if (grub_errno) if (grub_errno)
{ {
free_node (ctx->oldnode, ctx); free_node (ctx->oldnode, ctx);
ctx->oldnode = 0;
return grub_errno; return grub_errno;
} }
} }
if (ctx->oldnode != ctx->currnode) if (ctx->oldnode != ctx->currnode)
{
free_node (ctx->oldnode, ctx); free_node (ctx->oldnode, ctx);
ctx->oldnode = 0;
}
/* Found the node! */ /* Found the node! */
if (! next || *next == '\0') if (! next || *next == '\0')