You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2010/09/07 10:16:35 UTC
svn commit: r993272 - /subversion/trunk/subversion/libsvn_subr/io.c
Author: rhuijben
Date: Tue Sep 7 08:16:35 2010
New Revision: 993272
URL: http://svn.apache.org/viewvc?rev=993272&view=rev
Log:
Resolve two highly-unlikely open file handle leaks.
* subversion/libsvn_subr/io.c
(svn_io_file_create,
svn_io_write_unique): Close file handle on writing errors.
Modified:
subversion/trunk/subversion/libsvn_subr/io.c
Modified: subversion/trunk/subversion/libsvn_subr/io.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/io.c?rev=993272&r1=993271&r2=993272&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/io.c (original)
+++ subversion/trunk/subversion/libsvn_subr/io.c Tue Sep 7 08:16:35 2010
@@ -1025,14 +1025,19 @@ svn_error_t *svn_io_file_create(const ch
{
apr_file_t *f;
apr_size_t written;
+ svn_error_t *err;
SVN_ERR(svn_io_file_open(&f, file,
(APR_WRITE | APR_CREATE | APR_EXCL),
APR_OS_DEFAULT,
pool));
- SVN_ERR(svn_io_file_write_full(f, contents, strlen(contents),
- &written, pool));
- return svn_io_file_close(f, pool);
+ err= svn_io_file_write_full(f, contents, strlen(contents),
+ &written, pool);
+
+
+ return svn_error_return(
+ svn_error_compose_create(err,
+ svn_io_file_close(f, pool)));
}
svn_error_t *svn_io_dir_file_copy(const char *src_path,
@@ -2868,12 +2873,19 @@ svn_io_write_unique(const char **tmp_pat
apr_pool_t *pool)
{
apr_file_t *new_file;
+ svn_error_t *err;
SVN_ERR(svn_io_open_unique_file3(&new_file, tmp_path, dirpath,
delete_when, pool, pool));
- SVN_ERR(svn_io_file_write_full(new_file, buf, nbytes, NULL, pool));
- SVN_ERR(svn_io_file_flush_to_disk(new_file, pool));
- return svn_io_file_close(new_file, pool);
+
+ err = svn_io_file_write_full(new_file, buf, nbytes, NULL, pool);
+
+ if (!err)
+ err = svn_io_file_flush_to_disk(new_file, pool);
+
+ return svn_error_return(
+ svn_error_compose_create(err,
+ svn_io_file_close(new_file, pool)));
}