summaryrefslogtreecommitdiffstats
path: root/Source/cmSystemTools.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2012-11-27 18:34:07 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2012-11-27 18:34:07 (GMT)
commit805c0f3f899413efe466eee06f46a1b4a3cb285a (patch)
treed6ce88409630dfb7ba2b9fdccc673554b4229352 /Source/cmSystemTools.cxx
parent7e5f1e2cbd77777469502087302d1bc7fafd9fa6 (diff)
parent37c34d7d7b7b32c0f6c00acbb3375c79e42a5587 (diff)
downloadCMake-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/cmSystemTools.cxx')
-rw-r--r--Source/cmSystemTools.cxx7
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