From 8fd5ec92bb8dcd1336fbdc8da2914ce5101e5e1c Mon Sep 17 00:00:00 2001 From: Gabor Szalai <gabor.szalai@ericsson.com> Date: Wed, 14 Jul 2021 15:39:33 +0200 Subject: [PATCH] Hexstring RAW fix (#issue 557) The RAW encoding of hextring with - FIELDORDER(msb) - HEXORDER(high) - Field starts on half octet fails The hexstring starting of half octet is handled specially as only the hex digits in the whole octets should be swapped. Because the buffer is filled diferently in the case of different FIELDORDER, the hex digit swapping should be adopted to the FIELDORDER Signed-off-by: Gabor Szalai <gabor.szalai@ericsson.com> --- core/Encdec.cc | 9 +- regression_test/EncodeDecode/RAW/Makefile | 2 +- .../EncodeDecode/RAW/issue557/.gitignore | 8 + .../EncodeDecode/RAW/issue557/Issue557.ttcn | 67 ++++++++ .../EncodeDecode/RAW/issue557/Makefile | 149 ++++++++++++++++++ .../EncodeDecode/RAW/issue557/config.cfg | 20 +++ 6 files changed, 250 insertions(+), 5 deletions(-) create mode 100644 regression_test/EncodeDecode/RAW/issue557/.gitignore create mode 100644 regression_test/EncodeDecode/RAW/issue557/Issue557.ttcn create mode 100644 regression_test/EncodeDecode/RAW/issue557/Makefile create mode 100644 regression_test/EncodeDecode/RAW/issue557/config.cfg diff --git a/core/Encdec.cc b/core/Encdec.cc index f85fdc363..cfa24d7f7 100644 --- a/core/Encdec.cc +++ b/core/Encdec.cc @@ -743,9 +743,10 @@ void TTCN_Buffer::put_b(size_t len, const unsigned char *s, } /*printf("len:%d\r\n",len); printf("align:%d\r\n",align); -printf("coding bito:%s,byte:%s,field:%s\r\n",coding_par.bitorder==ORDER_MSB?"M":"L", +printf("coding bito:%s,byte:%s,field:%s, hex: %s\r\n",coding_par.bitorder==ORDER_MSB?"M":"L", coding_par.byteorder==ORDER_MSB?"M":"L", -coding_par.fieldorder==ORDER_MSB?"M":"L" +coding_par.fieldorder==ORDER_MSB?"M":"L", +coding_par.hexorder==ORDER_MSB?"M":"L" ); printf("local bito:%s,field:%s\r\n",local_bitorder==ORDER_MSB?"M":"L", local_fieldorder==ORDER_MSB?"M":"L" @@ -798,7 +799,7 @@ local_fieldorder==ORDER_MSB?"M":"L" //printf("new_size:%d new_bit_pos:%d\r\n",new_size,new_bit_pos); if(coding_par.hexorder==ORDER_MSB){ st2=(unsigned char*)Malloc((len+7)/8*sizeof(unsigned char)); - if(bit_pos==4){ + if(bit_pos==4 && local_fieldorder==ORDER_LSB){ st2[0]=s[0]; for(size_t a=1;a<(len+7)/8;a++){ unsigned char ch='\0'; @@ -1208,7 +1209,7 @@ void TTCN_Buffer::get_b(size_t len, unsigned char *s, } } if(coding_par.hexorder==ORDER_MSB){ - if(bit_pos==4){ + if(bit_pos==4 && local_fieldorder==ORDER_LSB){ for(size_t a=1;a<(len+7)/8;a++){ unsigned char ch='\0'; ch|=s[a-1]>>4; diff --git a/regression_test/EncodeDecode/RAW/Makefile b/regression_test/EncodeDecode/RAW/Makefile index 2b3e6a591..59cb8f9c4 100644 --- a/regression_test/EncodeDecode/RAW/Makefile +++ b/regression_test/EncodeDecode/RAW/Makefile @@ -20,7 +20,7 @@ include $(TOPDIR)/Makefile.regression RDIRS = Examples HN25015 HQ26535 HQ49956 HS16977 ustr Annex_E_variants Bug521125 \ Lengthto_Offset Bug522656 RAW_bitstring RAW_EncDec RAW_integer RAW_repeat ForceOmit Bug546231 \ - Bug547385 IntX CSN1_LH Bug572603 Issue555 + Bug547385 IntX CSN1_LH Bug572603 Issue555 issue557 all dep clean run distclean: for dir in $(RDIRS); do (cd $$dir && $(MAKE) $@) || exit; done diff --git a/regression_test/EncodeDecode/RAW/issue557/.gitignore b/regression_test/EncodeDecode/RAW/issue557/.gitignore new file mode 100644 index 000000000..384fefe01 --- /dev/null +++ b/regression_test/EncodeDecode/RAW/issue557/.gitignore @@ -0,0 +1,8 @@ +Issue557 +Issue557.exe +Issue557*.cc +Issue557*.hh +*.d +compile +Issue557*.log +result.txt diff --git a/regression_test/EncodeDecode/RAW/issue557/Issue557.ttcn b/regression_test/EncodeDecode/RAW/issue557/Issue557.ttcn new file mode 100644 index 000000000..22a8a1968 --- /dev/null +++ b/regression_test/EncodeDecode/RAW/issue557/Issue557.ttcn @@ -0,0 +1,67 @@ +/****************************************************************************** + * Copyright (c) 2000-2021 Ericsson Telecom AB + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html + * + * Contributors: + * Gabor, Szalai – initial implementation + * + ******************************************************************************/ + +module Issue557 { + + +type record R4{ + bitstring f1 length(4), + hexstring f2 +} with { + variant (f2) "HEXORDER(high)" + variant "FIELDORDER(msb)" +} + +type component CT{} + +template bitstring t_expected_encoded:=oct2bit('F123456789'O) +template R4 t_expected_decoded:={'1111'B, '123456789'H } + +testcase tc_issue557() runs on CT { + var R4 vl_pdu4:={'1111'B, '123456789'H } + var bitstring vl_encoded:=encvalue(vl_pdu4) + + log(vl_pdu4, " encoded as ",bit2oct(vl_encoded), " expected as ", bit2oct(valueof(t_expected_encoded))) + if(match(vl_encoded,t_expected_encoded)){ + setverdict(pass) + } else { + setverdict(fail, "wrong encoded value") + } + + vl_encoded:=valueof(t_expected_encoded) + var integer vl_res:=decvalue(vl_encoded,vl_pdu4) + + log("decode result: ", vl_res) + + if(vl_res == 0) { + setverdict(pass) + log(bit2oct(valueof(t_expected_encoded)), " decoded as ",vl_pdu4, " expected as ", t_expected_decoded) + if(match(vl_pdu4,t_expected_decoded)){ + setverdict(pass) + } else { + setverdict(fail, "wrong decoded value") + } + } else { + setverdict(fail, "Decoding failed") + } + + + +} + +control { + execute(tc_issue557()); +} + +} with { + encode "RAW" +} diff --git a/regression_test/EncodeDecode/RAW/issue557/Makefile b/regression_test/EncodeDecode/RAW/issue557/Makefile new file mode 100644 index 000000000..c04153ffe --- /dev/null +++ b/regression_test/EncodeDecode/RAW/issue557/Makefile @@ -0,0 +1,149 @@ +############################################################################## +# Copyright (c) 2000-2021 Ericsson Telecom AB +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html +# +# Contributors: +# Gabor, Szalai – initial implementation +# +############################################################################## +TOPDIR := ../../.. +include $(TOPDIR)/Makefile.regression + +# WARNING! This Makefile can be used with GNU make only. +# Other versions of make may report syntax errors in it. + +# +# Do NOT touch this line... +# +.PHONY: all archive check clean dep objects + +.SUFFIXES: .d + +# +# Set these variables... +# + +# Flags for dependency generation +CXXDEPFLAGS = -MM + +ifeq ($(PLATFORM), WIN32) +# Silence linker warnings. +# Overridden by Makefile.cfg +endif + +# Flags for the TTCN-3 and ASN.1 compiler: +COMPILER_FLAGS += + +# Execution mode: (either ttcn3 or ttcn3-parallel) +TTCN3_LIB = ttcn3$(RT2_SUFFIX)$(DYNAMIC_SUFFIX) + + +# +# You may change these variables. Add your files if necessary... +# + +# TTCN-3 modules of this project: +TTCN3_MODULES = Issue557.ttcn + +# ASN.1 modules of this project: +ASN1_MODULES = + +# C++ source & header files generated from the TTCN-3 & ASN.1 modules of +# this project: +GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) +GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) +ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif +# C/C++ Source & header files of Test Ports, external functions and +# other modules: +USER_SOURCES = +USER_HEADERS = $(USER_SOURCES:.cc=.hh) + +# Object files of this project that are needed for the executable test suite: +OBJECTS = $(GENERATED_OBJECTS) $(USER_OBJECTS) + +GENERATED_OBJECTS = $(GENERATED_SOURCES:.cc=.o) + +USER_OBJECTS = $(USER_SOURCES:.cc=.o) + +DEPFILES = $(USER_OBJECTS:.o=.d) $(GENERATED_OBJECTS:.o=.d) + + +# The name of the executable test suite: +TARGET = Issue557$(EXESUFFIX) + + +# Rules for building the executable... +# + +all: $(TARGET) + +objects: $(OBJECTS) ; + +$(TARGET): $(OBJECTS) + if $(CXX) $(LDFLAGS) -o $@ $^ \ + -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \ + -L$(OPENSSL_DIR)/lib -lcrypto \ + -L$(XMLDIR)/lib $($(PLATFORM)_LIBS); \ + then : ; else $(TTCN3_DIR)/bin/titanver $(OBJECTS); exit 1; fi + +.cc.o .c.o: + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $< + +.cc.d .c.d: + @echo Creating dependency file for '$<'; set -e; \ + $(CXX) $(CXXDEPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< \ + | sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \ + [ -s $@ ] || rm -f $@ + +$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile + @if [ ! -f $@ ]; then $(RM) compile; $(MAKE) compile; fi + +compile: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_COMPILER) $(COMPILER_FLAGS) $^ - $? + touch $@ + + +clean: + -$(RM) $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) compile $(DEPFILES) \ + tags *.log + +distclean: clean + -$(RM) $(DEPFILES) + + +dep: $(GENERATED_SOURCES) $(USER_SOURCES) ; + +ifeq ($(findstring n,$(MAKEFLAGS)),) +ifeq ($(filter clean distclean check compile archive diag,$(MAKECMDGOALS)),) +-include $(DEPFILES) +endif +endif + + + +diag: + $(TTCN3_COMPILER) -v 2>&1 + $(TTCN3_DIR)/bin/mctr_cli -v 2>&1 + $(CXX) -v 2>&1 + @echo TTCN3_DIR=$(TTCN3_DIR) + @echo OPENSSL_DIR=$(OPENSSL_DIR) + @echo XMLDIR=$(XMLDIR) + @echo PLATFORM=$(PLATFORM) + +# +# Add your rules here if necessary... +# + +run: $(TARGET) ./config.cfg + ./$^ 2> result.txt + cat result.txt + grep "Overall verdict: pass" result.txt diff --git a/regression_test/EncodeDecode/RAW/issue557/config.cfg b/regression_test/EncodeDecode/RAW/issue557/config.cfg new file mode 100644 index 000000000..9e6097f28 --- /dev/null +++ b/regression_test/EncodeDecode/RAW/issue557/config.cfg @@ -0,0 +1,20 @@ +############################################################################### +# Copyright (c) 2000-2021 Ericsson Telecom AB +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html +# +# Contributors: +# Botond, Baranyi +# +############################################################################### +[LOGGING] +LogFile := "Issue557.log" +FileMask := LOG_ALL +ConsoleMask := TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS +LogSourceInfo := Yes +[EXECUTE] +Issue557.control + +[TESTPORT_PARAMETERS] -- GitLab