mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-02 12:01:32 +01: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]
This commit is contained in:
parent
6ab0fac575
commit
7db6c82cec
@ -241,11 +241,17 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
|
||||
|
||||
rc = _keybox_write_header_blob (newfp, for_openpgp);
|
||||
if (rc)
|
||||
{
|
||||
fclose (newfp);
|
||||
return rc;
|
||||
}
|
||||
|
||||
rc = _keybox_write_blob (blob, newfp);
|
||||
if (rc)
|
||||
{
|
||||
fclose (newfp);
|
||||
return rc;
|
||||
}
|
||||
|
||||
if ( fclose (newfp) )
|
||||
return gpg_error_from_syserror ();
|
||||
@ -268,7 +274,8 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
|
||||
rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp);
|
||||
if (rc)
|
||||
{
|
||||
fclose(fp);
|
||||
fclose (fp);
|
||||
fclose (newfp);
|
||||
goto leave;
|
||||
}
|
||||
|
||||
@ -292,12 +299,16 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
|
||||
if (fwrite (buffer, nread, 1, newfp) != 1)
|
||||
{
|
||||
rc = gpg_error_from_syserror ();
|
||||
fclose (fp);
|
||||
fclose (newfp);
|
||||
goto leave;
|
||||
}
|
||||
}
|
||||
if (ferror (fp))
|
||||
{
|
||||
rc = gpg_error_from_syserror ();
|
||||
fclose (fp);
|
||||
fclose (newfp);
|
||||
goto leave;
|
||||
}
|
||||
}
|
||||
@ -321,28 +332,40 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
|
||||
if (fwrite (buffer, nread, 1, newfp) != 1)
|
||||
{
|
||||
rc = gpg_error_from_syserror ();
|
||||
fclose (fp);
|
||||
fclose (newfp);
|
||||
goto leave;
|
||||
}
|
||||
}
|
||||
if (ferror (fp))
|
||||
{
|
||||
rc = gpg_error_from_syserror ();
|
||||
fclose (fp);
|
||||
fclose (newfp);
|
||||
goto leave;
|
||||
}
|
||||
|
||||
/* Skip this blob. */
|
||||
rc = _keybox_read_blob (NULL, fp);
|
||||
if (rc)
|
||||
{
|
||||
fclose (fp);
|
||||
fclose (newfp);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
/* Do an insert or update. */
|
||||
if ( mode == FILECOPY_INSERT || mode == FILECOPY_UPDATE )
|
||||
{
|
||||
rc = _keybox_write_blob (blob, newfp);
|
||||
if (rc)
|
||||
{
|
||||
fclose (fp);
|
||||
fclose (newfp);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
/* Copy the rest of the packet for an delete or update. */
|
||||
if (mode == FILECOPY_DELETE || mode == FILECOPY_UPDATE)
|
||||
@ -352,12 +375,16 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
|
||||
if (fwrite (buffer, nread, 1, newfp) != 1)
|
||||
{
|
||||
rc = gpg_error_from_syserror ();
|
||||
fclose (fp);
|
||||
fclose (newfp);
|
||||
goto leave;
|
||||
}
|
||||
}
|
||||
if (ferror (fp))
|
||||
{
|
||||
rc = gpg_error_from_syserror ();
|
||||
fclose (fp);
|
||||
fclose (newfp);
|
||||
goto leave;
|
||||
}
|
||||
}
|
||||
@ -726,7 +753,7 @@ keybox_compress (KEYBOX_HANDLE hd)
|
||||
rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp);
|
||||
if (rc)
|
||||
{
|
||||
fclose(fp);
|
||||
fclose (fp);
|
||||
return rc;;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user