[esnacc-dev] [PATCH] c++ examples: fix narrowing conversions

Aaron Conole aconole at bytheb.org
Tue Sep 6 18:06:50 UTC 2016


A number of test suites in esnacc have improperly narrowed conversions which
trip more stringent checks.  Compilers known to trigger these warnings are
clang and g++ 6.  This commit reduces the narrowing conversion errors by
explicitly casting downward, and using wider fields for the initial bit
storage.

Reported-by: Uri Blumenthal <uri at mit.edu>
Fixes: https://github.com/esnacc/esnacc-ng/issues/35
Signed-off-by: Aaron Conole <aconole at bytheb.org>
---
NOTE: This patch will be backported to branch-1.8, to fix compilation issues
      under newer versions of fedora.

 cxx-examples/src/automatic.cpp | 6 +++---
 cxx-examples/src/bitstest.cpp  | 8 ++++----
 cxx-examples/src/inttest.cpp   | 6 +++---
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/cxx-examples/src/automatic.cpp b/cxx-examples/src/automatic.cpp
index 7c9b34b..b35f5aa 100644
--- a/cxx-examples/src/automatic.cpp
+++ b/cxx-examples/src/automatic.cpp
@@ -22,7 +22,7 @@ getHuman(const char *name, int age, bool isBiblical,
 int automaticTests()
 {
     struct Tests {
-        const char bytes[256];
+        const unsigned char bytes[256];
         size_t byte_len;
         const char *enc_bytes;
         SNACC::Human *h;
@@ -66,7 +66,7 @@ int automaticTests()
         bool fail_name = false;
         bool fail_age = false;
         bool fail_firstwords = false;
-        SNACC::AsnBuf b(t[i].bytes, t[i].byte_len);
+        SNACC::AsnBuf b((const char *)(t[i].bytes), t[i].byte_len);
         SNACC::AsnLen l;
         SNACC::Human h;
         try {
@@ -103,7 +103,7 @@ int automaticTests()
         }
 
         SNACC::AsnBuf benc;
-        SNACC::AsnBuf expected(t[i].bytes, t[i].byte_len);
+        SNACC::AsnBuf expected((const char *)(t[i].bytes), t[i].byte_len);
         try {
             h.BEnc(benc);
             if (!(benc == expected)) {
diff --git a/cxx-examples/src/bitstest.cpp b/cxx-examples/src/bitstest.cpp
index 10792bd..a1f0a2a 100644
--- a/cxx-examples/src/bitstest.cpp
+++ b/cxx-examples/src/bitstest.cpp
@@ -5,7 +5,7 @@ using namespace SNACC;
 typedef struct test_table
 {
    char *input;
-   char result[20];
+   unsigned char result[20];
    bool nblFlag;
 } AsnBitTestTable;
 
@@ -93,8 +93,8 @@ void bittests(void)
    {
       AsnBits asnBits(gBitTestTable[index].input);
       asnBits.UseNamedBitListRules(gBitTestTable[index].nblFlag);
-      AsnBuf expectedResult(&gBitTestTable[index].result[0], 
-         DecTagLen((unsigned char *)gBitTestTable[index].result+1) + 2);
+      AsnBuf expectedResult((const char *)&gBitTestTable[index].result[0], 
+         DecTagLen(gBitTestTable[index].result+1) + 2);
       AsnBuf result;
       AsnLen bytesEncoded;
 
@@ -138,4 +138,4 @@ void bittests(void)
       }
    }
    std::cout << "*** End of AsnBits tests ***\n";
-}
\ No newline at end of file
+}
diff --git a/cxx-examples/src/inttest.cpp b/cxx-examples/src/inttest.cpp
index 8927cf8..4645c0e 100644
--- a/cxx-examples/src/inttest.cpp
+++ b/cxx-examples/src/inttest.cpp
@@ -5,7 +5,7 @@ using namespace SNACC;
 typedef struct test_table
 {
    char *input;
-   char result[20];
+   unsigned char result[20];
    bool unsignedFlag;
 } AsnIntTestTable;
 
@@ -131,8 +131,8 @@ void inttests(void)
 
          AsnInt asnInt (gIntTestTable[testIndex].input,
             gIntTestTable[testIndex].unsignedFlag);
-         AsnBuf expectedResult(gIntTestTable[testIndex].result,
-            DecTagLen((unsigned char *)gIntTestTable[testIndex].result + 1) + 2);
+         AsnBuf expectedResult((const char *)gIntTestTable[testIndex].result,
+            DecTagLen(gIntTestTable[testIndex].result + 1) + 2);
          AsnBuf result;
       
          try
-- 
2.7.4



More information about the dev mailing list