Skip to content

Commit 0a45a60

Browse files
author
Marek Surovič
authored
Merge pull request #6481 from trailofbits/6480-instrumented-binary-segfaults-upon-writing-env-var-info
polytracker: fixes nullptr deref when printing stream sink env vars
2 parents 6ada903 + dc46d18 commit 0a45a60

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

polytracker/src/polytracker/main.cpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,13 @@ void polytracker_parse_env() {
5858
get_polytracker_db_name() = pdb;
5959
}
6060

61-
get_polytracker_stdout_sink() = getenv("POLYTRACKER_STDOUT_SINK");
62-
get_polytracker_stderr_sink() = getenv("POLYTRACKER_STDERR_SINK");
61+
if (auto out = getenv("POLYTRACKER_STDOUT_SINK")) {
62+
get_polytracker_stdout_sink() = out;
63+
}
64+
65+
if (auto err = getenv("POLYTRACKER_STDERR_SINK")) {
66+
get_polytracker_stderr_sink() = err;
67+
}
6368
}
6469

6570
/*
@@ -87,17 +92,26 @@ void polytracker_end() {
8792
}
8893

8994
void polytracker_print_settings() {
95+
// db name
9096
printf("POLYDB: %s\n", get_polytracker_db_name().c_str());
91-
printf("POLYTRACKER_STDOUT_SINK: %s\n",
92-
get_polytracker_stdout_sink().c_str());
93-
printf("POLYTRACKER_STDERR_SINK: %s\n",
94-
get_polytracker_stderr_sink().c_str());
97+
// stdout sink flag
98+
if (!get_polytracker_stdout_sink().empty()) {
99+
printf("POLYTRACKER_STDOUT_SINK: %s\n",
100+
get_polytracker_stdout_sink().c_str());
101+
}
102+
// stderr sink flag
103+
if (!get_polytracker_stderr_sink().empty()) {
104+
printf("POLYTRACKER_STDERR_SINK: %s\n",
105+
get_polytracker_stderr_sink().c_str());
106+
}
95107
}
96108

97109
void polytracker_start(func_mapping const *globals, uint64_t globals_count,
98110
block_mapping const *block_map, uint64_t block_map_count,
99111
bool control_flow_tracking) {
100112
DO_EARLY_DEFAULT_CONSTRUCT(std::string, polytracker_db_name)
113+
DO_EARLY_DEFAULT_CONSTRUCT(std::string, polytracker_stderr_sink);
114+
DO_EARLY_DEFAULT_CONSTRUCT(std::string, polytracker_stdout_sink);
101115
DO_EARLY_DEFAULT_CONSTRUCT(std::unordered_set<std::string>, target_sources);
102116

103117
get_target_sources();

0 commit comments

Comments
 (0)