diff --git a/core/Verdicttype.cc b/core/Verdicttype.cc index 3d4c932f0bbce900e90ec58f2cb9cdd1a8752d20..6fafd130906f1f427faab801d2e10b72f20e4c92 100644 --- a/core/Verdicttype.cc +++ b/core/Verdicttype.cc @@ -238,7 +238,9 @@ void VERDICTTYPE::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec_ErrorContext::error_internal ("No TEXT descriptor available for type '%s'.", p_td.name); const unsigned char *b=p_buf.get_data(); + int null_added=0; if(b[p_buf.get_len()-1]!='\0'){ + null_added=1; p_buf.set_pos(p_buf.get_len()); p_buf.put_zero(8,ORDER_LSB); p_buf.rewind(); @@ -248,6 +250,12 @@ void VERDICTTYPE::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, "Can not decode type '%s', because invalid or incomplete" " message was received" , p_td.name); + if(null_added){ + size_t actpos=p_buf.get_pos(); + p_buf.set_pos(p_buf.get_len()-1); + p_buf.cut_end(); + p_buf.set_pos(actpos); + } break;} #endif case TTCN_EncDec::CT_XER: { diff --git a/core2/Basetype2.cc b/core2/Basetype2.cc index 371e1dcc41f6a13c720983dfb238170be865214e..7037d71716d8f31e3a8e9e229091f3ee7240b189 100644 --- a/core2/Basetype2.cc +++ b/core2/Basetype2.cc @@ -3121,7 +3121,9 @@ void Record_Type::decode(const TTCN_Typedescriptor_t& p_td, if(!p_td.text) TTCN_EncDec_ErrorContext::error_internal ("No TEXT descriptor available for type '%s'.", p_td.name); const unsigned char *b=p_buf.get_data(); + int null_added=0; if(b[p_buf.get_len()-1]!='\0'){ + null_added=1; p_buf.set_pos(p_buf.get_len()); p_buf.put_zero(8,ORDER_LSB); p_buf.rewind(); @@ -3130,6 +3132,12 @@ void Record_Type::decode(const TTCN_Typedescriptor_t& p_td, ec.error(TTCN_EncDec::ET_INCOMPL_MSG, "Can not decode type '%s', because invalid or incomplete" " message was received", p_td.name); + if(null_added){ + size_t actpos=p_buf.get_pos(); + p_buf.set_pos(p_buf.get_len()-1); + p_buf.cut_end(); + p_buf.set_pos(actpos); + } break;} case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name); @@ -7316,7 +7324,9 @@ void Empty_Record_Type::decode(const TTCN_Typedescriptor_t& p_td, if(!p_td.text) TTCN_EncDec_ErrorContext::error_internal ("No TEXT descriptor available for type '%s'.", p_td.name); const unsigned char *b=p_buf.get_data(); + int null_added=0; if(b[p_buf.get_len()-1]!='\0'){ + null_added=1; p_buf.set_pos(p_buf.get_len()); p_buf.put_zero(8,ORDER_LSB); p_buf.rewind(); @@ -7325,6 +7335,12 @@ void Empty_Record_Type::decode(const TTCN_Typedescriptor_t& p_td, ec.error(TTCN_EncDec::ET_INCOMPL_MSG, "Can not decode type '%s', because invalid or incomplete" " message was received", p_td.name); + if(null_added){ + size_t actpos=p_buf.get_pos(); + p_buf.set_pos(p_buf.get_len()-1); + p_buf.cut_end(); + p_buf.set_pos(actpos); + } break;} case TTCN_EncDec::CT_XER: { TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);