From b5297abbf380f99abd72b29fd1770e64baceea35 Mon Sep 17 00:00:00 2001 From: Botond Baranyi <botond.baranyi@ericsson.com> Date: Thu, 3 Jan 2019 17:54:26 +0100 Subject: [PATCH] Added error behavior option for data remaining after decoding (bug 543155) Change-Id: Ic3c5e39ecc0efc7f56b5859b9a18c99e62298ff6 Signed-off-by: Botond Baranyi <botond.baranyi@ericsson.com> --- compiler2/ttcn3/AST_ttcn3.cc | 33 ++++++++++++--------------------- compiler2/ttcn3/Ttcnstuff.cc | 3 ++- core/Encdec.cc | 6 ++++-- core/Encdec.hh | 3 ++- 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/compiler2/ttcn3/AST_ttcn3.cc b/compiler2/ttcn3/AST_ttcn3.cc index dab85976b..67e40b153 100644 --- a/compiler2/ttcn3/AST_ttcn3.cc +++ b/compiler2/ttcn3/AST_ttcn3.cc @@ -7447,28 +7447,19 @@ namespace Ttcn { // checking for remaining data in the buffer if decoding was successful str = mputprintf(str, "if (TTCN_EncDec::get_last_error_type() == " "TTCN_EncDec::ET_NONE) {\n" - "if (ttcn_buffer.get_pos() < ttcn_buffer.get_len() && " - "TTCN_Logger::log_this_event(TTCN_WARNING)) {\n" + "if (ttcn_buffer.get_pos() < ttcn_buffer.get_len()) {\n" "ttcn_buffer.cut();\n" - "%s remaining_stream;\n", - input_type->get_genname_value(my_scope).c_str()); - if (input_type->get_type_refd_last()->get_typetype_ttcn3() == - Common::Type::T_BSTR) { - str = mputstr(str, - "OCTETSTRING tmp_os;\n" - "ttcn_buffer.get_string(tmp_os);\n" - "remaining_stream = oct2bit(tmp_os);\n"); - } - else { - str = mputstr(str, "ttcn_buffer.get_string(remaining_stream);\n"); - } - str = mputprintf(str, - "TTCN_Logger::begin_event(TTCN_WARNING);\n" - "TTCN_Logger::log_event_str(\"%s(): Warning: Data remained at the end " - "of the stream after successful decoding: \");\n" - "remaining_stream.log();\n" - "TTCN_Logger::end_event();\n" - "}\n", function_name); + "OCTETSTRING tmp_os;\n" + "ttcn_buffer.get_string(tmp_os);\n" + "TTCN_Logger::begin_event_log2str();\n" + "%s.log();\n" + "CHARSTRING remaining_stream = TTCN_Logger::end_event_log2str();\n" + "TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_EXTRA_DATA, " + "\"%s(): Data remained at the end of the stream after successful " + "decoding: %%s\", (const char*) remaining_stream);\n" + "}\n", + (input_type->get_type_refd_last()->get_typetype_ttcn3() == + Common::Type::T_BSTR) ? "oct2bit(tmp_os)" : "tmp_os", function_name); // closing the block and returning the appropriate result or status code if (prototype == PROTOTYPE_BACKTRACK) { if (debugger_active) { diff --git a/compiler2/ttcn3/Ttcnstuff.cc b/compiler2/ttcn3/Ttcnstuff.cc index f52495188..2d714f8dc 100644 --- a/compiler2/ttcn3/Ttcnstuff.cc +++ b/compiler2/ttcn3/Ttcnstuff.cc @@ -132,7 +132,8 @@ namespace Ttcn { "INVAL_MSG", "REPR", "CONSTRAINT", "TAG", "SUPERFL", "EXTENSION", "DEC_ENUM", "DEC_DUPFLD", "DEC_MISSFLD", "DEC_OPENTYPE", "DEC_UCSTR", "LEN_ERR", "SIGN_ERR", "INCOMP_ORDER", "TOKEN_ERR", "LOG_MATCHING", - "FLOAT_TR", "FLOAT_NAN", "OMITTED_TAG", "NEGTEST_CONFL", NULL }; + "FLOAT_TR", "FLOAT_NAN", "OMITTED_TAG", "NEGTEST_CONFL", "EXTRA_DATA", + NULL }; bool type_found = false; for (const char * const *str = valid_types; *str; str++) { if (error_type == *str) { diff --git a/core/Encdec.cc b/core/Encdec.cc index 2ec117d24..5ca573705 100644 --- a/core/Encdec.cc +++ b/core/Encdec.cc @@ -57,7 +57,8 @@ TTCN_EncDec::default_error_behavior[TTCN_EncDec::ET_ALL] = { TTCN_EncDec::EB_WARNING, TTCN_EncDec::EB_ERROR, TTCN_EncDec::EB_ERROR, - TTCN_EncDec::EB_ERROR + TTCN_EncDec::EB_ERROR, + TTCN_EncDec::EB_WARNING }; TTCN_EncDec::error_behavior_t @@ -87,7 +88,8 @@ TTCN_EncDec::error_behavior[TTCN_EncDec::ET_ALL] = { TTCN_EncDec::EB_WARNING, TTCN_EncDec::EB_ERROR, TTCN_EncDec::EB_ERROR, - TTCN_EncDec::EB_ERROR + TTCN_EncDec::EB_ERROR, + TTCN_EncDec::EB_WARNING }; TTCN_EncDec::error_type_t TTCN_EncDec::last_error_type=ET_NONE; diff --git a/core/Encdec.hh b/core/Encdec.hh index b65660d9a..68be2fa2d 100644 --- a/core/Encdec.hh +++ b/core/Encdec.hh @@ -104,7 +104,8 @@ public: ET_OMITTED_TAG, /**< During encoding the key of a tag references an optional field with omitted value */ ET_NEGTEST_CONFL, /**< Contradictory negative testing and RAW attributes. */ - ET_ALL, /**< Used only when setting error behavior. 26 */ + ET_EXTRA_DATA, /**< Data remained after decoding. */ + ET_ALL, /**< Used only when setting error behavior. 27 */ ET_INTERNAL, /**< Internal error. Error behavior cannot be set for this. */ ET_NONE /**< There was no error. */ -- GitLab