Skip to content

RAW enc/dec error, hexstring, FILEDORDER(msb), HEXORDER(high), field starts on half octet

Copy of titan.core#557 (closed)

Summary

The encoding of the hexstring is faulty if:

  • FILEDORDER(msb)
  • HEXORDER(high)
  • The field starts on the half octet

Steps and/or TTCN-3 code to reproduce

module proba {
 
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 TC2() 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(TC2())
}
  
} with {encode "RAW"}

What is the current bug behavior?

15:05:12.936648 proba.ttcn:69 Component type proba.CT was initialized.
15:05:12.937090 proba.ttcn:73 { f1 := '1111'B, f2 := '123456789'H }encoded as 'F315274968'O expected as 'F123456789'O
15:05:12.937457 proba.ttcn:77 setverdict(fail): none -> fail reason: "wrong encoded value", new component reason: "wrong encoded value"
15:05:12.937788 proba.ttcn:83 decode result: 0
15:05:12.938259 proba.ttcn:87 'F123456789'Odecoded as { f1 := '1111'B, f2 := '241638597'H } expected as { f1 := '1111'B, f2 := '123456789'H }
15:05:12.938626 proba.ttcn:91 setverdict(fail): fail -> fail reason: "wrong decoded value", component reason not changed

What is the expected correct behavior?

15:08:15.666778 proba.ttcn:73 { f1 := '1111'B, f2 := '123456789'H } encoded as 'F123456789'O expected as 'F123456789'O
15:08:15.667254 proba.ttcn:75 setverdict(pass): none -> pass
15:08:15.667984 proba.ttcn:83 decode result: 0
15:08:15.668373 proba.ttcn:86 setverdict(pass): pass -> pass, component reason not changed
15:08:15.668687 proba.ttcn:87 'F123456789'O decoded as { f1 := '1111'B, f2 := '123456789'H } expected as { f1 := '1111'B, f2 := '123456789'H }
15:08:15.669039 proba.ttcn:89 setverdict(pass): pass -> pass, component reason not changed

Titan version

Up to 8.0.0