From 090ac0a6e08afbcc0992ec7552c17e8bee467942 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Wed, 29 Jun 2022 12:48:50 -0700 Subject: [PATCH] binpac: Remove already-applied binpac-* patches --- tools/binpac/patches/binpac-1.patch | 31 --- tools/binpac/patches/binpac-2.patch | 97 --------- tools/binpac/patches/binpac-3.patch | 37 ---- tools/binpac/patches/binpac-4.patch | 12 -- tools/binpac/patches/binpac-6.patch | 27 --- tools/binpac/patches/binpac-8.patch | 190 ------------------ .../patches/brosslbinpacanalyzerpatches.zip | Bin 8025 -> 0 bytes 7 files changed, 394 deletions(-) delete mode 100644 tools/binpac/patches/binpac-1.patch delete mode 100644 tools/binpac/patches/binpac-2.patch delete mode 100644 tools/binpac/patches/binpac-3.patch delete mode 100644 tools/binpac/patches/binpac-4.patch delete mode 100644 tools/binpac/patches/binpac-6.patch delete mode 100644 tools/binpac/patches/binpac-8.patch delete mode 100644 tools/binpac/patches/brosslbinpacanalyzerpatches.zip diff --git a/tools/binpac/patches/binpac-1.patch b/tools/binpac/patches/binpac-1.patch deleted file mode 100644 index 20ad9e3e3c..0000000000 --- a/tools/binpac/patches/binpac-1.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff -urN bro-1.2.1-orig/src/pac_expr.cc bro-1.2.1-ssl-binpac/src/pac_expr.cc ---- bro-1.2.1-orig/src/pac_expr.cc 2006-07-26 15:02:40.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_expr.cc 2007-05-04 14:31:11.728494000 -0700 -@@ -776,2 +776,2 @@ - } - break; - -+ case EXPR_CALLARGS: -+ { -+ mhs = 0; -+ if ( args_ ) -+ for ( uint i = 0; i < args_->size(); ++i ) -+ mhs = mhs_max(mhs, args_->at(i)->MinimalHeaderSize(env)); -+ } -+ break; -+ case EXPR_CASE: -+ { -+ mhs = operand_[0]->MinimalHeaderSize(env); -+ for ( uint i = 0; i < cases_->size(); ++i ) -+ { -+ CaseExpr * ce = cases_->at(i); -+ if ( ce->index() ) -+ for ( uint j = 0; j < ce->index()->size(); ++j ) -+ mhs = mhs_max(mhs, ce->index()->at(j)->MinimalHeaderSize(env)); -+ mhs = mhs_max(mhs, ce->value()->MinimalHeaderSize(env)); -+ } -+ } -+ break; - default: - // Evaluate every operand by default - mhs = 0; diff --git a/tools/binpac/patches/binpac-2.patch b/tools/binpac/patches/binpac-2.patch deleted file mode 100644 index fe946740c2..0000000000 --- a/tools/binpac/patches/binpac-2.patch +++ /dev/null @@ -1,97 +0,0 @@ -diff -urN bro-1.2.1-orig/src/pac_expr.cc bro-1.2.1-ssl-binpac/src/pac_expr.cc ---- bro-1.2.1-orig/src/pac_expr.cc 2006-07-26 15:02:40.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_expr.cc 2007-05-04 14:31:11.728494000 -0700 -@@ -245,6 +245,12 @@ - out_cc->println("%s %s;", - val_type->DataTypeStr().c_str(), - env->LValue(val_var)); -+ -+ // force evaluation of IDs appearing in case stmt -+ operand_[0]->ForceIDEval(out_cc, env); -+ foreach(i, CaseExprList, cases_) -+ (*i)->value()->ForceIDEval(out_cc, env); -+ - out_cc->println("switch ( %s )", operand_[0]->EvalExpr(out_cc, env)); - - out_cc->inc_indent(); -@@ -386,6 +392,49 @@ - } - } - -+void Expr::ForceIDEval(Output* out_cc, Env* env) -+ { -+ switch ( expr_type_ ) -+ { -+ case EXPR_NUM: -+ case EXPR_SIZEOF: -+ case EXPR_OFFSETOF: -+ break; -+ -+ case EXPR_ID: -+ if ( ! env->Evaluated(id_) ) -+ env->Evaluate(out_cc, id_); -+ break; -+ -+ case EXPR_MEMBER: -+ operand_[0]->ForceIDEval(out_cc, env); -+ break; -+ -+ case EXPR_CALLARGS: -+ { -+ foreach(i, ExprList, args_) -+ (*i)->ForceIDEval(out_cc, env); -+ } -+ break; -+ -+ case EXPR_CASE: -+ { -+ operand_[0]->ForceIDEval(out_cc, env); -+ foreach(i, CaseExprList, cases_) -+ (*i)->value()->ForceIDEval(out_cc, env); -+ } -+ break; -+ -+ default: -+ // Evaluate every operand by default -+ for ( int i = 0; i < 3; ++i ) -+ if ( operand_[i] ) -+ operand_[i]->ForceIDEval(out_cc, env); -+ break; -+ } -+ } -+ -+ - const char* Expr::EvalExpr(Output* out_cc, Env* env) - { - GenEval(out_cc, env); -diff -urN bro-1.2.1-orig/src/pac_expr.h bro-1.2.1-ssl-binpac/src/pac_expr.h ---- bro-1.2.1-orig/src/pac_expr.h 2006-07-26 15:02:39.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_expr.h 2007-05-04 14:16:31.624287000 -0700 -@@ -56,6 +56,11 @@ - // - const char *EvalExpr(Output *out, Env *env); - -+ // force evaulation of IDs contained in this expression; -+ // necessary with case expr and conditional let fields (&if) -+ // for correct parsing of fields -+ void ForceIDEval(Output *out_cc, Env *env); -+ - // Returns the set_* function of the expression. - // The expression must be of form ID or x.ID. - string SetFunc(Output *out, Env *env); -diff -urN bro-1.2.1-orig/src/pac_let.cc bro-1.2.1-ssl-binpac/src/pac_let.cc ---- bro-1.2.1-orig/src/pac_let.cc 2006-07-26 15:02:39.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_let.cc 2007-05-04 15:32:09.695568000 -0700 -@@ -80,7 +80,12 @@ - if ( type_->attr_if_expr() ) - { - // A conditional field -+ - env->Evaluate(out_cc, type_->has_value_var()); -+ -+ // force evaluation of IDs contained in this expr -+ expr()->ForceIDEval(out_cc, env); -+ - out_cc->println("if ( %s )", - env->RValue(type_->has_value_var())); - out_cc->inc_indent(); diff --git a/tools/binpac/patches/binpac-3.patch b/tools/binpac/patches/binpac-3.patch deleted file mode 100644 index 5b520d5e09..0000000000 --- a/tools/binpac/patches/binpac-3.patch +++ /dev/null @@ -1,37 +0,0 @@ -diff -urN bro-1.2.1-orig/src/pac_let.cc bro-1.2.1-ssl-binpac/src/pac_let.cc ---- bro-1.2.1-orig/src/pac_let.cc 2006-07-26 15:02:39.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_let.cc 2007-05-04 15:32:09.695568000 -0700 -@@ -108,11 +108,6 @@ - void LetField::GenEval(Output* out_cc, Env* env) - { - GenParseCode(out_cc, env); -- if ( type_->attr_if_expr() ) -- { -- out_cc->println("BINPAC_ASSERT(%s);", -- env->RValue(type_->has_value_var())); -- } - } - - LetDecl::LetDecl(ID *id, Type *type, Expr *expr) -diff -urN bro-1.2.1-orig/src/pac_type.cc bro-1.2.1-ssl-binpac/src/pac_type.cc ---- bro-1.2.1-orig/src/pac_type.cc 2006-07-26 15:02:40.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_type.cc 2007-05-24 10:56:42.140658000 -0700 -@@ -316,9 +316,15 @@ - { - if ( DefineValueVar() ) - { -- out_h->println("%s %s const { return %s; }", -- DataTypeConstRefStr().c_str(), -- env->RValue(value_var()), lvalue()); -+ if ( attr_if_expr_ ) -+ out_h->println("%s %s const { BINPAC_ASSERT(%s); return %s; }", -+ DataTypeConstRefStr().c_str(), -+ env->RValue(value_var()), -+ env->RValue(has_value_var()), lvalue()); -+ else -+ out_h->println("%s %s const { return %s; }", -+ DataTypeConstRefStr().c_str(), -+ env->RValue(value_var()), lvalue()); - } - - foreach (i, FieldList, fields_) diff --git a/tools/binpac/patches/binpac-4.patch b/tools/binpac/patches/binpac-4.patch deleted file mode 100644 index feb644fba3..0000000000 --- a/tools/binpac/patches/binpac-4.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -urN bro-1.2.1-orig/src/pac_record.cc bro-1.2.1-ssl-binpac/src/pac_record.cc ---- bro-1.2.1-orig/src/pac_record.cc 2006-07-26 15:02:40.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_record.cc 2007-05-08 16:13:33.373850000 -0700 -@@ -123,5 +123,5 @@ - void RecordType::DoGenParseCode(Output* out_cc, Env* env, - const DataPtr& data, int flags) - { -- if ( StaticSize(env) >= 0 ) -+ if ( !incremental_input() && StaticSize(env) >= 0 ) - GenBoundaryCheck(out_cc, env, data); - - if ( incremental_parsing() ) diff --git a/tools/binpac/patches/binpac-6.patch b/tools/binpac/patches/binpac-6.patch deleted file mode 100644 index 9b13a1cef5..0000000000 --- a/tools/binpac/patches/binpac-6.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff -urN bro-1.2.1-orig/src/lib/binpac_buffer.h bro-1.2.1-ssl-binpac/src/lib/binpac_buffer.h ---- bro-1.2.1-orig/src/lib/binpac_buffer.h 2006-07-26 15:02:38.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/lib/binpac_buffer.h 2007-05-09 16:14:54.501656000 -0700 -@@ -59,6 +59,11 @@ - return frame_length_; - } - -+ inline bool data_available() const -+ { -+ return buffer_n_ > 0 || orig_data_end_ > orig_data_begin_; -+ } -+ - void NewLine(); - // A negative frame_length represents a frame till EOF - void NewFrame(int frame_length, bool chunked_); -diff -urN bro-1.2.1-orig/src/pac_flow.cc bro-1.2.1-ssl-binpac/src/pac_flow.cc ---- bro-1.2.1-orig/src/pac_flow.cc 2006-10-12 14:13:12.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_flow.cc 2007-05-22 16:43:55.997562000 -0700 -@@ -272,7 +272,8 @@ - env_->RValue(begin_of_data), - env_->RValue(end_of_data)); - -- out_cc->println("while ( true )"); -+ out_cc->println("while ( %s->data_available() )", -+ env_->LValue(flow_buffer_id)); - out_cc->inc_indent(); - out_cc->println("{"); diff --git a/tools/binpac/patches/binpac-8.patch b/tools/binpac/patches/binpac-8.patch deleted file mode 100644 index f452027725..0000000000 --- a/tools/binpac/patches/binpac-8.patch +++ /dev/null @@ -1,190 +0,0 @@ -diff -urN bro-1.2.1-orig/src/pac_analyzer.cc bro-1.2.1-ssl-binpac/src/pac_analyzer.cc ---- bro-1.2.1-orig/src/pac_analyzer.cc 2006-07-26 15:02:40.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_analyzer.cc 2007-05-22 17:00:10.091531000 -0700 -@@ -26,8 +26,9 @@ - helpers_ = new AnalyzerHelperList(); - functions_ = new FunctionList(); - -- constructor_helper_ = 0; -- destructor_helper_ = 0; -+ constructor_helpers_ = new AnalyzerHelperList(); -+ destructor_helpers_ = new AnalyzerHelperList(); -+ eof_helpers_ = new AnalyzerHelperList(); - - SetAnalyzerContext(); - -@@ -41,6 +42,9 @@ - delete_list(AnalyzerHelperList, helpers_); - delete_list(FunctionList, functions_); - delete_list(ParamList, params_); -+ delete_list(AnalyzerHelperList, constructor_helpers_); -+ delete_list(AnalyzerHelperList, destructor_helpers_); -+ delete_list(AnalyzerHelperList, eof_helpers_); - } - - void AnalyzerDecl::AddElements(AnalyzerElementList *elemlist) -@@ -75,28 +79,20 @@ - AnalyzerHelper *helper_elem = - (AnalyzerHelper *) elem; - -- if ( helper_elem->helper_type() == -- AnalyzerHelper::INIT_CODE) -- { -- if ( constructor_helper_ ) -- { -- throw Exception(elem, -- "Repeated definition of %init code"); -- } -- constructor_helper_ = helper_elem; -+ switch ( helper_elem->helper_type() ) -+ { -+ case AnalyzerHelper::INIT_CODE: -+ constructor_helpers_->push_back(helper_elem); -+ break; -+ case AnalyzerHelper::CLEANUP_CODE: -+ destructor_helpers_->push_back(helper_elem); -+ break; -+ case AnalyzerHelper::EOF_CODE: -+ eof_helpers_->push_back(helper_elem); -+ break; -+ default: -+ helpers_->push_back(helper_elem); - } -- else if ( helper_elem->helper_type() == -- AnalyzerHelper::CLEANUP_CODE) -- { -- if ( destructor_helper_ ) -- { -- throw Exception(elem, -- "Repeated definition of %cleanup code"); -- } -- destructor_helper_ = helper_elem; -- } -- else -- helpers_->push_back(helper_elem); - } - break; - case AnalyzerElement::FUNCTION: -@@ -217,15 +213,19 @@ - void AnalyzerDecl::GenInitCode(Output *out_cc) - { - TypeDecl::GenInitCode(out_cc); -- if ( constructor_helper_ ) -- constructor_helper_->GenCode(0, out_cc, this); -+ foreach(i, AnalyzerHelperList, constructor_helpers_) -+ { -+ (*i)->GenCode(0, out_cc, this); -+ } - } - - void AnalyzerDecl::GenCleanUpCode(Output *out_cc) - { - TypeDecl::GenCleanUpCode(out_cc); -- if ( destructor_helper_ ) -- destructor_helper_->GenCode(0, out_cc, this); -+ foreach(i, AnalyzerHelperList, destructor_helpers_) -+ { -+ (*i)->GenCode(0, out_cc, this); -+ } - } - - void AnalyzerDecl::GenStateVarDecls(Output *out_h) -@@ -295,6 +295,7 @@ - break; - case INIT_CODE: - case CLEANUP_CODE: -+ case EOF_CODE: - out = out_cc; - break; - } -diff -urN bro-1.2.1-orig/src/pac_analyzer.h bro-1.2.1-ssl-binpac/src/pac_analyzer.h ---- bro-1.2.1-orig/src/pac_analyzer.h 2006-07-26 15:02:39.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_analyzer.h 2007-05-22 16:32:08.397926000 -0700 -@@ -76,8 +76,9 @@ - AnalyzerHelperList *helpers_; - FunctionList *functions_; - -- AnalyzerHelper *constructor_helper_; -- AnalyzerHelper *destructor_helper_; -+ AnalyzerHelperList *constructor_helpers_; -+ AnalyzerHelperList *destructor_helpers_; -+ AnalyzerHelperList *eof_helpers_; - }; - - class AnalyzerElement : public Object -@@ -117,6 +118,7 @@ - MEMBER_DECLS, - INIT_CODE, - CLEANUP_CODE, -+ EOF_CODE, - }; - AnalyzerHelper(Type helper_type, EmbeddedCode *code) - : AnalyzerElement(HELPER), -diff -urN bro-1.2.1-orig/src/pac_conn.cc bro-1.2.1-ssl-binpac/src/pac_conn.cc ---- bro-1.2.1-orig/src/pac_conn.cc 2006-07-26 15:02:40.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_conn.cc 2007-05-22 16:42:35.406135000 -0700 -@@ -97,6 +97,12 @@ - out_cc->println("%s->%s();", - env_->LValue(downflow_id), - kFlowEOF); -+ -+ foreach(i, AnalyzerHelperList, eof_helpers_) -+ { -+ (*i)->GenCode(0, out_cc, this); -+ } -+ - out_cc->dec_indent(); - - out_cc->println("}"); -diff -urN bro-1.2.1-orig/src/pac_flow.cc bro-1.2.1-ssl-binpac/src/pac_flow.cc ---- bro-1.2.1-orig/src/pac_flow.cc 2006-10-12 14:13:12.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_flow.cc 2007-05-22 16:43:55.997562000 -0700 -@@ -151,6 +151,11 @@ - out_cc->inc_indent(); - out_cc->println("{"); - -+ foreach(i, AnalyzerHelperList, eof_helpers_) -+ { -+ (*i)->GenCode(0, out_cc, this); -+ } -+ - if ( dataunit_->type() == AnalyzerDataUnit::FLOWUNIT ) - { - out_cc->println("%s->set_eof();", -diff -urN bro-1.2.1-orig/src/pac_parse.yy bro-1.2.1-ssl-binpac/src/pac_parse.yy ---- bro-1.2.1-orig/src/pac_parse.yy 2006-10-12 14:13:12.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_parse.yy 2007-05-22 16:56:09.280526000 -0700 -@@ -22,7 +22,7 @@ - %token TOK_STATE TOK_ACTION TOK_WHEN TOK_HELPER - %token TOK_DATAUNIT TOK_FLOWDIR TOK_WITHCONTEXT - %token TOK_LPB_EXTERN TOK_LPB_HEADER TOK_LPB_CODE --%token TOK_LPB_MEMBER TOK_LPB_INIT TOK_LPB_CLEANUP -+%token TOK_LPB_MEMBER TOK_LPB_INIT TOK_LPB_CLEANUP TOK_LPB_EOF - %token TOK_LPB TOK_RPB - %token TOK_EMBEDDED_ATOM TOK_EMBEDDED_STRING - %token TOK_PAC_VAL TOK_PAC_SET TOK_PAC_TYPE TOK_PAC_TYPEOF TOK_PAC_CONST_DEF -@@ -795,6 +795,10 @@ - { - $$ = new AnalyzerHelper(AnalyzerHelper::CLEANUP_CODE, $2); - } -+ | TOK_LPB_EOF embedded_code TOK_RPB -+ { -+ $$ = new AnalyzerHelper(AnalyzerHelper::EOF_CODE, $2); -+ } - | TOK_FLOWDIR '=' tok_id optargs ';' - { - $$ = new AnalyzerFlow((AnalyzerFlow::Direction) $1, $3, $4); -diff -urN bro-1.2.1-orig/src/pac_scan.ll bro-1.2.1-ssl-binpac/src/pac_scan.ll ---- bro-1.2.1-orig/src/pac_scan.ll 2006-07-26 15:02:40.000000000 -0700 -+++ bro-1.2.1-ssl-binpac/src/pac_scan.ll 2007-05-22 16:55:19.349644000 -0700 -@@ -96,6 +96,10 @@ - BEGIN(EC); - return TOK_LPB_MEMBER; - } -+"%eof{" { -+ BEGIN(EC); -+ return TOK_LPB_EOF; -+ } - "%{" { - BEGIN(EC); - return TOK_LPB; diff --git a/tools/binpac/patches/brosslbinpacanalyzerpatches.zip b/tools/binpac/patches/brosslbinpacanalyzerpatches.zip deleted file mode 100644 index 4d89326f71cc03cdd85616c3ee943d8d09072b0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8025 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