From c0bbd78ee1c856ea62687fe3f10d867e8dd760c4 Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Tue, 10 Jul 2012 11:15:48 -0500 Subject: [PATCH 1/3] Fix segfault when there's an error/timeout resolving DNS requests. Addresses #846. --- src/DNS_Mgr.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DNS_Mgr.cc b/src/DNS_Mgr.cc index 9e65d3c9a9..6b0f18f459 100644 --- a/src/DNS_Mgr.cc +++ b/src/DNS_Mgr.cc @@ -693,7 +693,7 @@ Val* DNS_Mgr::BuildMappingVal(DNS_Mapping* dm) void DNS_Mgr::AddResult(DNS_Mgr_Request* dr, struct nb_dns_result* r) { struct hostent* h = (r && r->host_errno == 0) ? r->hostent : 0; - u_int32_t ttl = r->ttl; + u_int32_t ttl = (r && r->host_errno == 0) ? r->ttl : 0; DNS_Mapping* new_dm; DNS_Mapping* prev_dm; From 7f4b0b52f8de12466125b0bf2ab44cfc1b4ea77e Mon Sep 17 00:00:00 2001 From: Daniel Thayer Date: Tue, 10 Jul 2012 15:39:05 -0500 Subject: [PATCH 2/3] Fix compiler warnings These changes eliminate 405 of 571 warnings seen on OS X 10.7.4 with clang. --- src/EventHandler.cc | 2 +- src/Func.cc | 2 +- src/RemoteSerializer.h | 4 ++-- src/SMB.cc | 2 +- src/SerialObj.cc | 2 +- src/Sessions.h | 2 +- src/Type.cc | 2 +- src/input/readers/Ascii.cc | 4 ++-- src/logging/Manager.cc | 2 +- src/ssl-analyzer.pac | 4 ++-- src/threading/SerialTypes.h | 4 ++-- 11 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/EventHandler.cc b/src/EventHandler.cc index 2867b63437..5598f93f98 100644 --- a/src/EventHandler.cc +++ b/src/EventHandler.cc @@ -96,7 +96,7 @@ EventHandler* EventHandler::Unserialize(UnserialInfo* info) { char* name; if ( ! UNSERIALIZE_STR(&name, 0) ) - return false; + return 0; EventHandler* h = event_registry->Lookup(name); if ( ! h ) diff --git a/src/Func.cc b/src/Func.cc index 30689d4c26..582de1d9bb 100644 --- a/src/Func.cc +++ b/src/Func.cc @@ -100,7 +100,7 @@ Func* Func::Unserialize(UnserialInfo* info) if ( ! (id->HasVal() && id->ID_Val()->Type()->Tag() == TYPE_FUNC) ) { info->s->Error(fmt("ID %s is not a built-in", name)); - return false; + return 0; } Unref(f); diff --git a/src/RemoteSerializer.h b/src/RemoteSerializer.h index 1d7feef585..5ff7fff8d6 100644 --- a/src/RemoteSerializer.h +++ b/src/RemoteSerializer.h @@ -17,8 +17,8 @@ class IncrementalSendTimer; namespace threading { - class Field; - class Value; + struct Field; + struct Value; } // This class handles the communication done in Bro's main loop. diff --git a/src/SMB.cc b/src/SMB.cc index edce2a69b8..a06707328a 100644 --- a/src/SMB.cc +++ b/src/SMB.cc @@ -368,7 +368,7 @@ int SMB_Session::ParseSetupAndx(int is_orig, binpac::SMB::SMB_header const& hdr, // The binpac type depends on the negotiated server settings - // possibly we can just pick the "right" format here, and use that? - if ( hdr.flags2() && 0x0800 ) + if ( hdr.flags2() & 0x0800 ) { binpac::SMB::SMB_setup_andx_ext msg(hdr.unicode()); msg.Parse(body.data(), body.data() + body.length()); diff --git a/src/SerialObj.cc b/src/SerialObj.cc index a8ab969f5e..73cab275c2 100644 --- a/src/SerialObj.cc +++ b/src/SerialObj.cc @@ -163,7 +163,7 @@ SerialObj* SerialObj::Unserialize(UnserialInfo* info, SerialType type) if ( ! result ) { DBG_POP(DBG_SERIAL); - return false; + return 0; } DBG_POP(DBG_SERIAL); diff --git a/src/Sessions.h b/src/Sessions.h index a7d7b1272f..25065012e6 100644 --- a/src/Sessions.h +++ b/src/Sessions.h @@ -18,7 +18,7 @@ struct pcap_pkthdr; class EncapsulationStack; class Connection; -class ConnID; +struct ConnID; class OSFingerprint; class ConnCompressor; diff --git a/src/Type.cc b/src/Type.cc index caba0c9fa0..414c07d3d7 100644 --- a/src/Type.cc +++ b/src/Type.cc @@ -910,7 +910,7 @@ Val* RecordType::FieldDefault(int field) const const TypeDecl* td = FieldDecl(field); if ( ! td->attrs ) - return false; + return 0; const Attr* def_attr = td->attrs->FindAttr(ATTR_DEFAULT); diff --git a/src/input/readers/Ascii.cc b/src/input/readers/Ascii.cc index 1731bba872..dd1e742e5e 100644 --- a/src/input/readers/Ascii.cc +++ b/src/input/readers/Ascii.cc @@ -232,7 +232,7 @@ Value* Ascii::EntryToVal(string s, FieldMapping field) { Error(Fmt("Field: %s Invalid value for boolean: %s", field.name.c_str(), s.c_str())); - return false; + return 0; } break; @@ -262,7 +262,7 @@ Value* Ascii::EntryToVal(string s, FieldMapping field) if ( pos == s.npos ) { Error(Fmt("Invalid value for subnet: %s", s.c_str())); - return false; + return 0; } int width = atoi(s.substr(pos+1).c_str()); diff --git a/src/logging/Manager.cc b/src/logging/Manager.cc index 511fedc984..0fea3d577d 100644 --- a/src/logging/Manager.cc +++ b/src/logging/Manager.cc @@ -983,7 +983,7 @@ WriterFrontend* Manager::CreateWriter(EnumVal* id, EnumVal* writer, const Writer if ( ! stream ) // Don't know this stream. - return false; + return 0; Stream::WriterMap::iterator w = stream->writers.find(Stream::WriterPathPair(writer->AsEnum(), info.path)); diff --git a/src/ssl-analyzer.pac b/src/ssl-analyzer.pac index bf9cf1e0ba..bd4b76ee98 100644 --- a/src/ssl-analyzer.pac +++ b/src/ssl-analyzer.pac @@ -295,7 +295,7 @@ refine connection SSL_Conn += { for ( int k = 0; k < num_ext; ++k ) { unsigned char *pBuffer = 0; - uint length = 0; + int length = 0; X509_EXTENSION* ex = X509_get_ext(pTemp, k); if (ex) @@ -303,7 +303,7 @@ refine connection SSL_Conn += { ASN1_STRING *pString = X509_EXTENSION_get_data(ex); length = ASN1_STRING_to_UTF8(&pBuffer, pString); //i2t_ASN1_OBJECT(&pBuffer, length, obj) - // printf("extension length: %u\n", length); + // printf("extension length: %d\n", length); // -1 indicates an error. if ( length < 0 ) continue; diff --git a/src/threading/SerialTypes.h b/src/threading/SerialTypes.h index 9ce53c7cb1..283d88bf4c 100644 --- a/src/threading/SerialTypes.h +++ b/src/threading/SerialTypes.h @@ -2,8 +2,6 @@ #ifndef THREADING_SERIALIZATIONTYPES_H #define THREADING_SERIALIZATIONTYPES_H -using namespace std; - #include #include #include @@ -11,6 +9,8 @@ using namespace std; #include "Type.h" #include "net_util.h" +using namespace std; + class SerializationFormat; namespace threading { From c4b6499d858c5799845f9f312931bc845e506e05 Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Tue, 10 Jul 2012 16:27:03 -0500 Subject: [PATCH 3/3] Add sorting canonifier to rotate-custom unit test. (addresses #846) The output on stderr for this test is the results of many backgrounded "echo" commands, one for each rotation, so the order in which they occur may be subject to OS process scheduling and can't be relied upon --- testing/btest/scripts/base/frameworks/logging/rotate-custom.bro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/btest/scripts/base/frameworks/logging/rotate-custom.bro b/testing/btest/scripts/base/frameworks/logging/rotate-custom.bro index 3f6d40adaf..8a7f16d182 100644 --- a/testing/btest/scripts/base/frameworks/logging/rotate-custom.bro +++ b/testing/btest/scripts/base/frameworks/logging/rotate-custom.bro @@ -2,7 +2,7 @@ #@TEST-EXEC: bro -b -r ${TRACES}/rotation.trace %INPUT | egrep "test|test2" | sort >out # @TEST-EXEC: for i in `ls test*.log | sort`; do printf '> %s\n' $i; cat $i; done | sort | uniq >>out # @TEST-EXEC: btest-diff out -# @TEST-EXEC: btest-diff .stderr +# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-sort btest-diff .stderr module Test;