From a9155aceb259136d08c7ee336b85c929d41d06ab Mon Sep 17 00:00:00 2001 From: Gregor Maier Date: Wed, 24 Aug 2011 13:44:41 -0700 Subject: [PATCH] Fix missing format string that caused some segfaults (v2) My previous fix wasn't enough. --- src/Reporter.cc | 18 +++++++++--------- src/Reporter.h | 6 ++++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/Reporter.cc b/src/Reporter.cc index a942067834..b3dfe9765d 100644 --- a/src/Reporter.cc +++ b/src/Reporter.cc @@ -121,7 +121,7 @@ void Reporter::Syslog(const char* fmt, ...) va_end(ap); } -void Reporter::WeirdHelper(EventHandlerPtr event, Val* conn_val, const char* name, const char* addl, ...) +void Reporter::WeirdHelper(EventHandlerPtr event, Val* conn_val, const char* addl, const char* fmt_name, ...) { val_list* vl = new val_list(1); @@ -132,22 +132,22 @@ void Reporter::WeirdHelper(EventHandlerPtr event, Val* conn_val, const char* nam vl->append(new StringVal(addl)); va_list ap; - va_start(ap, addl); - DoLog("weird", event, stderr, 0, vl, false, false, name, ap); + va_start(ap, fmt_name); + DoLog("weird", event, stderr, 0, vl, false, false, fmt_name, ap); va_end(ap); delete vl; } -void Reporter::WeirdFlowHelper(const uint32* orig, const uint32* resp, const char* name, ...) +void Reporter::WeirdFlowHelper(const uint32* orig, const uint32* resp, const char* fmt_name, ...) { val_list* vl = new val_list(2); vl->append(new AddrVal(orig)); vl->append(new AddrVal(resp)); va_list ap; - va_start(ap, name); - DoLog("weird", flow_weird, stderr, 0, vl, false, false, name, ap); + va_start(ap, fmt_name); + DoLog("weird", flow_weird, stderr, 0, vl, false, false, fmt_name, ap); va_end(ap); delete vl; @@ -155,17 +155,17 @@ void Reporter::WeirdFlowHelper(const uint32* orig, const uint32* resp, const cha void Reporter::Weird(const char* name) { - WeirdHelper(net_weird, 0, name, 0); + WeirdHelper(net_weird, 0, 0, name); } void Reporter::Weird(Connection* conn, const char* name, const char* addl) { - WeirdHelper(conn_weird, conn->BuildConnVal(), name, "%s", addl); + WeirdHelper(conn_weird, conn->BuildConnVal(), addl, "%s", name); } void Reporter::Weird(Val* conn_val, const char* name, const char* addl) { - WeirdHelper(conn_weird, conn_val, name, "%s", addl); + WeirdHelper(conn_weird, conn_val, addl, "%s", name); } void Reporter::Weird(const uint32* orig, const uint32* resp, const char* name) diff --git a/src/Reporter.h b/src/Reporter.h index bc919d3908..d0fc66299b 100644 --- a/src/Reporter.h +++ b/src/Reporter.h @@ -89,8 +89,10 @@ public: private: void DoLog(const char* prefix, EventHandlerPtr event, FILE* out, Connection* conn, val_list* addl, bool location, bool time, const char* fmt, va_list ap); - void WeirdHelper(EventHandlerPtr event, Val* conn_val, const char* name, const char* addl, ...); - void WeirdFlowHelper(const uint32* orig, const uint32* resp, const char* name, ...); + // The order if addl, name needs to be like that since fmt_name can + // contain format specifiers + void WeirdHelper(EventHandlerPtr event, Val* conn_val, const char* addl, const char* fmt_name, ...); + void WeirdFlowHelper(const uint32* orig, const uint32* resp, const char* fmt_name, ...); int errors; bool via_events;