Skip to content

Commit

Permalink
Merge pull request google#260 from ukai/shell_escape
Browse files Browse the repository at this point in the history
Shell escape arguments to /bin/mail.
  • Loading branch information
shinh authored Oct 31, 2017
2 parents 07781ab + 5c3b9d7 commit 1698638
Showing 1 changed file with 40 additions and 1 deletion.
41 changes: 40 additions & 1 deletion src/logging.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1730,6 +1730,42 @@ void SetExitOnDFatal(bool value) {
} // namespace internal
} // namespace base

// Shell-escaping as we need to shell out ot /bin/mail.
static const char kDontNeedShellEscapeChars[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+-_.=/:,@";

static string ShellEscape(const string& src) {
string result;
if (!src.empty() && // empty string needs quotes
src.find_first_not_of(kDontNeedShellEscapeChars) == string::npos) {
// only contains chars that don't need quotes; it's fine
result.assign(src);
} else if (src.find_first_of('\'') == string::npos) {
// no single quotes; just wrap it in single quotes
result.assign("'");
result.append(src);
result.append("'");
} else {
// needs double quote escaping
result.assign("\"");
for (size_t i = 0; i < src.size(); ++i) {
switch (src[i]) {
case '\\':
case '$':
case '"':
case '`':
result.append("\\");
}
result.append(src, i, 1);
}
result.append("\"");
}
return result;
}


// use_logging controls whether the logging functions LOG/VLOG are used
// to log errors. It should be set to false when the caller holds the
// log_mutex.
Expand All @@ -1745,7 +1781,10 @@ static bool SendEmailInternal(const char*dest, const char *subject,
}

string cmd =
FLAGS_logmailer + " -s\"" + subject + "\" " + dest;
FLAGS_logmailer + " -s" +
ShellEscape(subject) + " " + ShellEscape(dest);
VLOG(4) << "Mailing command: " << cmd;

FILE* pipe = popen(cmd.c_str(), "w");
if (pipe != NULL) {
// Add the body if we have one
Expand Down

0 comments on commit 1698638

Please sign in to comment.