[esnacc-dev] [PATCH] c++ examples: fix narrowing conversions
Aaron Conole
aconole at redhat.com
Tue Sep 6 21:41:46 UTC 2016
Uri Blumenthal <uri at mit.edu> writes:
> ACK - patch works. ;-)
Thanks, pushed to master.
>> On Sep 6, 2016, at 14:06 , Aaron Conole <aconole at bytheb.org> wrote:
>>
>> 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
>>
>
> --
> Uri the Great
> uri at mit.edu
More information about the dev
mailing list