From 93f5e33bb4c86798e532e781a59089961498974c Mon Sep 17 00:00:00 2001 From: Amos Jeffries Date: Sat, 3 Mar 2012 16:34:13 -0700 Subject: [PATCH] Bug 3490: Crash writing Apache Common and Referer/Username logs --- src/log/FormatHttpdCombined.cc | 10 ++++++++-- src/log/FormatSquidReferer.cc | 4 ++++ src/log/FormatSquidUseragent.cc | 4 ++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/log/FormatHttpdCombined.cc b/src/log/FormatHttpdCombined.cc index 573c82bcb9..67374ae212 100644 --- a/src/log/FormatHttpdCombined.cc +++ b/src/log/FormatHttpdCombined.cc @@ -48,11 +48,17 @@ Log::Format::HttpdCombined(AccessLogEntry * al, Logfile * logfile) const char *user_auth = ::Format::QuoteUrlEncodeUsername(al->cache.authuser); - const char *referer = al->request->header.getStr(HDR_REFERER); + const char *referer = NULL; + const char *agent = NULL; + + if (al && al->request) { + referer = al->request->header.getStr(HDR_REFERER); + agent = al->request->header.getStr(HDR_USER_AGENT); + } + if (!referer || *referer == '\0') referer = "-"; - const char *agent = al->request->header.getStr(HDR_USER_AGENT); if (!agent || *agent == '\0') agent = "-"; diff --git a/src/log/FormatSquidReferer.cc b/src/log/FormatSquidReferer.cc index 16f8b3d17b..a498af9b49 100644 --- a/src/log/FormatSquidReferer.cc +++ b/src/log/FormatSquidReferer.cc @@ -43,6 +43,10 @@ void Log::Format::SquidReferer(AccessLogEntry *al, Logfile *logfile) { + // do not log unless there is something to be displayed + if (!al || !al->request) + return; + const char *referer = al->request->header.getStr(HDR_REFERER); // do not log unless there is something to be displayed diff --git a/src/log/FormatSquidUseragent.cc b/src/log/FormatSquidUseragent.cc index 9eb825006f..470629e1f4 100644 --- a/src/log/FormatSquidUseragent.cc +++ b/src/log/FormatSquidUseragent.cc @@ -43,6 +43,10 @@ void Log::Format::SquidUserAgent(AccessLogEntry * al, Logfile * logfile) { + // do not log unless there is something to be displayed. + if (!al || !al->request) + return; + const char *agent = al->request->header.getStr(HDR_USER_AGENT); // do not log unless there is something to be displayed. -- 2.47.2