mirror of
git://git.gnupg.org/gnupg.git
synced 2025-04-17 15:44:34 +02:00
kbx: Fix resource leak.
* kbx/keybox-update.c (blob_filecopy): Fix resource leak. On error return, 'fp' and 'newfp' was never closed. -- Signed-off-by: Joshua Rogers <git@internot.info> [Log entry reformatted, and added more fixes - gniibe] (cherry picked from commit 7db6c82cec49b7c56c403a8ea98364086baf75f3)
This commit is contained in:
parent
2b2adb8594
commit
a55c212538
@ -237,11 +237,17 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
|
|||||||
|
|
||||||
rc = _keybox_write_header_blob (newfp);
|
rc = _keybox_write_header_blob (newfp);
|
||||||
if (rc)
|
if (rc)
|
||||||
|
{
|
||||||
|
fclose (newfp);
|
||||||
return rc;
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
rc = _keybox_write_blob (blob, newfp);
|
rc = _keybox_write_blob (blob, newfp);
|
||||||
if (rc)
|
if (rc)
|
||||||
|
{
|
||||||
|
fclose (newfp);
|
||||||
return rc;
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
if ( fclose (newfp) )
|
if ( fclose (newfp) )
|
||||||
return gpg_error_from_syserror ();
|
return gpg_error_from_syserror ();
|
||||||
@ -265,6 +271,7 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
|
|||||||
if (rc)
|
if (rc)
|
||||||
{
|
{
|
||||||
fclose (fp);
|
fclose (fp);
|
||||||
|
fclose (newfp);
|
||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,12 +284,16 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
|
|||||||
if (fwrite (buffer, nread, 1, newfp) != 1)
|
if (fwrite (buffer, nread, 1, newfp) != 1)
|
||||||
{
|
{
|
||||||
rc = gpg_error_from_syserror ();
|
rc = gpg_error_from_syserror ();
|
||||||
|
fclose (fp);
|
||||||
|
fclose (newfp);
|
||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ferror (fp))
|
if (ferror (fp))
|
||||||
{
|
{
|
||||||
rc = gpg_error_from_syserror ();
|
rc = gpg_error_from_syserror ();
|
||||||
|
fclose (fp);
|
||||||
|
fclose (newfp);
|
||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -306,28 +317,40 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
|
|||||||
if (fwrite (buffer, nread, 1, newfp) != 1)
|
if (fwrite (buffer, nread, 1, newfp) != 1)
|
||||||
{
|
{
|
||||||
rc = gpg_error_from_syserror ();
|
rc = gpg_error_from_syserror ();
|
||||||
|
fclose (fp);
|
||||||
|
fclose (newfp);
|
||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ferror (fp))
|
if (ferror (fp))
|
||||||
{
|
{
|
||||||
rc = gpg_error_from_syserror ();
|
rc = gpg_error_from_syserror ();
|
||||||
|
fclose (fp);
|
||||||
|
fclose (newfp);
|
||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Skip this blob. */
|
/* Skip this blob. */
|
||||||
rc = _keybox_read_blob (NULL, fp);
|
rc = _keybox_read_blob (NULL, fp);
|
||||||
if (rc)
|
if (rc)
|
||||||
|
{
|
||||||
|
fclose (fp);
|
||||||
|
fclose (newfp);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Do an insert or update. */
|
/* Do an insert or update. */
|
||||||
if ( mode == 1 || mode == 3 )
|
if ( mode == 1 || mode == 3 )
|
||||||
{
|
{
|
||||||
rc = _keybox_write_blob (blob, newfp);
|
rc = _keybox_write_blob (blob, newfp);
|
||||||
if (rc)
|
if (rc)
|
||||||
|
{
|
||||||
|
fclose (fp);
|
||||||
|
fclose (newfp);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Copy the rest of the packet for an delete or update. */
|
/* Copy the rest of the packet for an delete or update. */
|
||||||
if (mode == 2 || mode == 3)
|
if (mode == 2 || mode == 3)
|
||||||
@ -337,12 +360,16 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
|
|||||||
if (fwrite (buffer, nread, 1, newfp) != 1)
|
if (fwrite (buffer, nread, 1, newfp) != 1)
|
||||||
{
|
{
|
||||||
rc = gpg_error_from_syserror ();
|
rc = gpg_error_from_syserror ();
|
||||||
|
fclose (fp);
|
||||||
|
fclose (newfp);
|
||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ferror (fp))
|
if (ferror (fp))
|
||||||
{
|
{
|
||||||
rc = gpg_error_from_syserror ();
|
rc = gpg_error_from_syserror ();
|
||||||
|
fclose (fp);
|
||||||
|
fclose (newfp);
|
||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user