cmUVProcessChain: Add assert() for static analysis tools

Some static analysis tools throw a false positive for an
out-of-bounds item that is being dereferenced. This out-of-bounds
error will never actually happen because of how
cmUVProcessChain::InternalData::AddCommand() is being called.
Nevertheless, this change adds an assert() to help static analysis
tools be absolutely certain that the referenced item is within the
vector's bounds.

This change also changes the item access to use an index rather
than an iterator.
This commit is contained in:
Kyle Edwards
2019-05-14 12:23:41 -04:00
parent a9837130cd
commit dfa24355ea
+4 -1
View File
@@ -8,6 +8,8 @@
#include "cmUVStreambuf.h"
#include "cm_uv.h"
#include <assert.h>
#include <iterator>
#include <memory>
#include <utility>
@@ -250,7 +252,8 @@ bool cmUVProcessChain::InternalData::AddCommand(
if (first) {
stdio[0].flags = UV_IGNORE;
} else {
auto& prev = **std::prev(this->Processes.end(), 2);
assert(this->Processes.size() >= 2);
auto& prev = *this->Processes[this->Processes.size() - 2];
stdio[0].flags = UV_INHERIT_STREAM;
stdio[0].data.stream = prev.OutputPipe;
}