mirror of
https://github.com/nlohmann/json.git
synced 2026-10-12 01:17:14 +00:00
Check the CSV file and the round count in the json_view benchmarks
fopen() of the CSV output was not checked, so an unwritable directory made fprintf() write to a null FILE*; the round count is parsed with strtol and clamped instead of atoi. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
3 files changed
+21
-3
No files matched your search
@@ -220,7 +220,8 @@ int main(int argc, char** argv)
|
|||||||
{
|
{
|
||||||
if (std::strcmp(argv[i], "--rounds") == 0 && i + 1 < argc)
|
if (std::strcmp(argv[i], "--rounds") == 0 && i + 1 < argc)
|
||||||
{
|
{
|
||||||
rounds = std::atoi(argv[++i]);
|
// (clamped: 0 rounds by size, at most a million)
|
||||||
|
rounds = static_cast<int>((std::min)((std::max)(std::strtol(argv[++i], nullptr, 10), 0L), 1000000L));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -228,6 +229,11 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::FILE* csv = std::fopen("bench_corpus.csv", "w");
|
std::FILE* csv = std::fopen("bench_corpus.csv", "w");
|
||||||
|
if (csv == nullptr)
|
||||||
|
{
|
||||||
|
std::perror("bench_corpus.csv");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
std::fprintf(csv, "file,bytes,workload,engine,ns\n");
|
std::fprintf(csv, "file,bytes,workload,engine,ns\n");
|
||||||
json_document reused;
|
json_document reused;
|
||||||
simdjson::dom::parser sj;
|
simdjson::dom::parser sj;
|
||||||
|
|||||||
@@ -497,7 +497,8 @@ int main(int argc, char** argv)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
const std::string T = std::string(argv[1]) + "/";
|
const std::string T = std::string(argv[1]) + "/";
|
||||||
const int rounds = argc > 2 ? std::atoi(argv[2]) : 20;
|
// (clamped to 1 to a million)
|
||||||
|
const int rounds = argc > 2 ? static_cast<int>((std::min)((std::max)(std::strtol(argv[2], nullptr, 10), 1L), 1000000L)) : 20;
|
||||||
const std::string only = argc > 3 ? argv[3] : "";
|
const std::string only = argc > 3 ? argv[3] : "";
|
||||||
struct doc
|
struct doc
|
||||||
{
|
{
|
||||||
@@ -526,6 +527,11 @@ int main(int argc, char** argv)
|
|||||||
};
|
};
|
||||||
|
|
||||||
std::FILE* csv = std::fopen("bench_edit.csv", "w");
|
std::FILE* csv = std::fopen("bench_edit.csv", "w");
|
||||||
|
if (csv == nullptr)
|
||||||
|
{
|
||||||
|
std::perror("bench_edit.csv");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
std::fprintf(csv, "doc,bytes,workload,engine,ns\n");
|
std::fprintf(csv, "doc,bytes,workload,engine,ns\n");
|
||||||
for (const auto& dc : docs)
|
for (const auto& dc : docs)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -608,7 +608,8 @@ int main(int argc, char** argv)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
const std::string T = std::string(argv[1]) + "/";
|
const std::string T = std::string(argv[1]) + "/";
|
||||||
const int rounds = argc > 2 ? std::atoi(argv[2]) : 30;
|
// (clamped to 1 to a million)
|
||||||
|
const int rounds = argc > 2 ? static_cast<int>((std::min)((std::max)(std::strtol(argv[2], nullptr, 10), 1L), 1000000L)) : 30;
|
||||||
const std::string only = argc > 3 ? argv[3] : "";
|
const std::string only = argc > 3 ? argv[3] : "";
|
||||||
struct doc
|
struct doc
|
||||||
{
|
{
|
||||||
@@ -645,6 +646,11 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::FILE* csv = std::fopen("bench_view.csv", "w");
|
std::FILE* csv = std::fopen("bench_view.csv", "w");
|
||||||
|
if (csv == nullptr)
|
||||||
|
{
|
||||||
|
std::perror("bench_view.csv");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
std::fprintf(csv, "doc,bytes,workload,engine,ns\n");
|
std::fprintf(csv, "doc,bytes,workload,engine,ns\n");
|
||||||
json_document reused;
|
json_document reused;
|
||||||
simdjson::dom::parser sj;
|
simdjson::dom::parser sj;
|
||||||
|
|||||||
Reference in new issue
Block a user