From 1656cdc93c1edfc32975e2e8fc021ef275f9f488 Mon Sep 17 00:00:00 2001
From: Kristof Szabados <Kristof.Szabados@ericsson.com>
Date: Fri, 11 Dec 2020 21:02:42 +0100
Subject: [PATCH] it looks like passing enums to va_start is unsafe as
 codechecker reports "passing an object that undergoes default argument
 promotion to 'va_start' has undefined behavior". Maybe adding a casting to
 int (forcing the int conversion) will fix it.

Signed-off-by: Kristof Szabados <Kristof.Szabados@ericsson.com>
---
 compiler2/encdec.c           | 2 +-
 core/ASN_Any.cc              | 2 +-
 core/ASN_CharacterString.cc  | 2 +-
 core/ASN_EmbeddedPDV.cc      | 2 +-
 core/ASN_External.cc         | 2 +-
 core/ASN_Null.cc             | 2 +-
 core/Basetype.cc             | 2 +-
 core/Bitstring.cc            | 2 +-
 core/Boolean.cc              | 2 +-
 core/Charstring.cc           | 2 +-
 core/Float.cc                | 2 +-
 core/Hexstring.cc            | 2 +-
 core/Integer.cc              | 2 +-
 core/Objid.cc                | 2 +-
 core/Octetstring.cc          | 2 +-
 core/Universal_charstring.cc | 2 +-
 core/Verdicttype.cc          | 2 +-
 17 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/compiler2/encdec.c b/compiler2/encdec.c
index 821163ad0..ee048f56e 100644
--- a/compiler2/encdec.c
+++ b/compiler2/encdec.c
@@ -176,7 +176,7 @@ void def_encdec(const char *p_classname,
      " TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...)\n"
      "{\n"
      "  va_list pvar;\n"
-     "  va_start(pvar, p_coding);\n"
+     "  va_start(pvar, (int)p_coding);\n"
      "  switch(p_coding) {\n"
      "  case TTCN_EncDec::CT_BER: {\n"
      "    TTCN_EncDec_ErrorContext ec(\"While BER-decoding type"
diff --git a/core/ASN_Any.cc b/core/ASN_Any.cc
index d5a7d254f..eb96b2d9f 100644
--- a/core/ASN_Any.cc
+++ b/core/ASN_Any.cc
@@ -56,7 +56,7 @@ void ASN_ANY::decode(const TTCN_Typedescriptor_t& p_td,
                      TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/ASN_CharacterString.cc b/core/ASN_CharacterString.cc
index 3aa14fa4a..f51a30828 100644
--- a/core/ASN_CharacterString.cc
+++ b/core/ASN_CharacterString.cc
@@ -3271,7 +3271,7 @@ void CHARACTER_STRING::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_
 void CHARACTER_STRING::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/ASN_EmbeddedPDV.cc b/core/ASN_EmbeddedPDV.cc
index 69072c6fe..1d2bb8c6f 100644
--- a/core/ASN_EmbeddedPDV.cc
+++ b/core/ASN_EmbeddedPDV.cc
@@ -3375,7 +3375,7 @@ void EMBEDDED_PDV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf,
 void EMBEDDED_PDV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/ASN_External.cc b/core/ASN_External.cc
index 467dd678c..e9487c3bc 100644
--- a/core/ASN_External.cc
+++ b/core/ASN_External.cc
@@ -3590,7 +3590,7 @@ void EXTERNAL::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTC
 void EXTERNAL::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/ASN_Null.cc b/core/ASN_Null.cc
index c83217680..eda76fa7f 100644
--- a/core/ASN_Null.cc
+++ b/core/ASN_Null.cc
@@ -166,7 +166,7 @@ void ASN_NULL::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf,
                       TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/Basetype.cc b/core/Basetype.cc
index 189d06ecf..d2884ca26 100644
--- a/core/Basetype.cc
+++ b/core/Basetype.cc
@@ -120,7 +120,7 @@ void Base_Type::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf,
                        TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/Bitstring.cc b/core/Bitstring.cc
index bd3659cff..9ec2181e5 100644
--- a/core/Bitstring.cc
+++ b/core/Bitstring.cc
@@ -700,7 +700,7 @@ void BITSTRING::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf,
                        TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/Boolean.cc b/core/Boolean.cc
index 119dff27a..be6763a8f 100644
--- a/core/Boolean.cc
+++ b/core/Boolean.cc
@@ -267,7 +267,7 @@ void BOOLEAN::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf,
                      TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/Charstring.cc b/core/Charstring.cc
index 5473bc240..d9ffec4ce 100644
--- a/core/Charstring.cc
+++ b/core/Charstring.cc
@@ -861,7 +861,7 @@ void CHARSTRING::decode(const TTCN_Typedescriptor_t& p_td,
                         TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/Float.cc b/core/Float.cc
index 124035d55..a08cfd443 100644
--- a/core/Float.cc
+++ b/core/Float.cc
@@ -403,7 +403,7 @@ void FLOAT::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf,
                    TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/Hexstring.cc b/core/Hexstring.cc
index 30b081539..2455ae0fa 100644
--- a/core/Hexstring.cc
+++ b/core/Hexstring.cc
@@ -704,7 +704,7 @@ void HEXSTRING::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf,
   TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch (p_coding) {
   case TTCN_EncDec::CT_RAW: {
     TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
diff --git a/core/Integer.cc b/core/Integer.cc
index ff72dc104..af8d626b5 100644
--- a/core/Integer.cc
+++ b/core/Integer.cc
@@ -817,7 +817,7 @@ void INTEGER::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf,
                      TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/Objid.cc b/core/Objid.cc
index 2b9f8ed38..5045b26f5 100644
--- a/core/Objid.cc
+++ b/core/Objid.cc
@@ -327,7 +327,7 @@ void OBJID::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf,
                    TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/Octetstring.cc b/core/Octetstring.cc
index 95ffad3ba..2275d3c69 100644
--- a/core/Octetstring.cc
+++ b/core/Octetstring.cc
@@ -662,7 +662,7 @@ void OCTETSTRING::decode(const TTCN_Typedescriptor_t& p_td,
                          TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/Universal_charstring.cc b/core/Universal_charstring.cc
index 7b94b06ea..a26ced34d 100644
--- a/core/Universal_charstring.cc
+++ b/core/Universal_charstring.cc
@@ -1168,7 +1168,7 @@ void UNIVERSAL_CHARSTRING::decode(const TTCN_Typedescriptor_t& p_td,
   TTCN_Buffer& p_buf, TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
   case TTCN_EncDec::CT_BER: {
     TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
diff --git a/core/Verdicttype.cc b/core/Verdicttype.cc
index 07f7496c9..9bc2eba5b 100644
--- a/core/Verdicttype.cc
+++ b/core/Verdicttype.cc
@@ -208,7 +208,7 @@ void VERDICTTYPE::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf,
                      TTCN_EncDec::coding_t p_coding, ...)
 {
   va_list pvar;
-  va_start(pvar, p_coding);
+  va_start(pvar, (int)p_coding);
   switch(p_coding) {
 #if 0
   case TTCN_EncDec::CT_RAW: {
-- 
GitLab