From e4d6a9c1edbb7e35f014fd5d457f20ee5a545d2d Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Fri, 3 Feb 2023 13:34:59 -0800 Subject: Improve input validation for --hartids flag Disallow negative hartids, repeated hartids, and empty lists. --- spike_main/spike.cc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/spike_main/spike.cc b/spike_main/spike.cc index e7ee03a..533811f 100644 --- a/spike_main/spike.cc +++ b/spike_main/spike.cc @@ -299,10 +299,28 @@ static std::vector parse_hartids(const char *s) int n; while (stream >> n) { + if (n < 0) { + fprintf(stderr, "Negative hart ID %d is unsupported\n", n); + exit(-1); + } + hartids.push_back(n); if (stream.peek() == ',') stream.ignore(); } + if (hartids.empty()) { + fprintf(stderr, "No hart IDs specified\n"); + exit(-1); + } + + std::sort(hartids.begin(), hartids.end()); + + const auto dup = std::adjacent_find(hartids.begin(), hartids.end()); + if (dup != hartids.end()) { + fprintf(stderr, "Duplicate hart ID %zu\n", *dup); + exit(-1); + } + return hartids; } -- cgit v1.1