diff options
author | Brad King <brad.king@kitware.com> | 2012-11-27 18:34:07 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2012-11-27 18:34:07 (GMT) |
commit | 805c0f3f899413efe466eee06f46a1b4a3cb285a (patch) | |
tree | d6ce88409630dfb7ba2b9fdccc673554b4229352 /Source | |
parent | 7e5f1e2cbd77777469502087302d1bc7fafd9fa6 (diff) | |
parent | 37c34d7d7b7b32c0f6c00acbb3375c79e42a5587 (diff) | |
download | CMake-805c0f3f899413efe466eee06f46a1b4a3cb285a.zip CMake-805c0f3f899413efe466eee06f46a1b4a3cb285a.tar.gz CMake-805c0f3f899413efe466eee06f46a1b4a3cb285a.tar.bz2 |
Merge topic 'fix-untar-infinite-loop'
37c34d7 CMake: Fix infinite loop untarring corrupt tar file
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmSystemTools.cxx | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 89f03f6..544f7e4 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -1932,6 +1932,7 @@ bool extract_tar(const char* outFileName, bool verbose, { cmSystemTools::Error("Problem with archive_read_next_header(): ", archive_error_string(a)); + break; } if (verbose && extract) { @@ -1954,6 +1955,7 @@ bool extract_tar(const char* outFileName, bool verbose, cmSystemTools::Error( "Problem with archive_write_disk_set_options(): ", archive_error_string(ext)); + break; } r = archive_write_header(ext, entry); @@ -1963,6 +1965,7 @@ bool extract_tar(const char* outFileName, bool verbose, archive_error_string(ext)); cmSystemTools::Error("Current file:", archive_entry_pathname(entry)); + break; } else { @@ -1972,6 +1975,7 @@ bool extract_tar(const char* outFileName, bool verbose, { cmSystemTools::Error("Problem with archive_write_finish_entry(): ", archive_error_string(ext)); + break; } } } @@ -1982,8 +1986,7 @@ bool extract_tar(const char* outFileName, bool verbose, } archive_read_close(a); archive_read_finish(a); - return true; - + return r == ARCHIVE_EOF || r == ARCHIVE_OK; } } #endif |