From 0640cc0995d9fe1db31072c103c56ebad9e7669d Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Thu, 27 Oct 2005 23:38:26 +0000 Subject: [PATCH] fixed GDD: aitConvertStringEnum16 does nothing if pEnumStringTable==NULL mantis 211 --- src/gdd/aitConvert.cc | 48 +++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/src/gdd/aitConvert.cc b/src/gdd/aitConvert.cc index c969437c3..d2e3ac524 100644 --- a/src/gdd/aitConvert.cc +++ b/src/gdd/aitConvert.cc @@ -174,20 +174,30 @@ static int aitConvertStringEnum16(void* d,const void* s, { aitIndex i; int status=0; - char temp[AIT_FIXED_STRING_SIZE]; aitString* out=(aitString*)d; aitEnum16* in=(aitEnum16*)s; for (i=0;inumberOfStrings() ) { - out[i].copy( pEnumStringTable->getString (in[i]) ); - nChar = pEnumStringTable->getStringLength ( in[i] ); + unsigned nChar = pEnumStringTable->getStringLength ( in[i] ); + if ( nChar < static_cast ( INT_MAX - status ) ) { + out[i].copy( pEnumStringTable->getString ( in[i] ), nChar ); + status += static_cast ( nChar );; + } + else { + return -1; + } } else { - nChar = sprintf(temp, "%hu",in[i]); - assert (nChar>0); + char temp[AIT_FIXED_STRING_SIZE]; + int tmpStatus = sprintf ( temp, "%hu", in[i] ); + if ( tmpStatus >= 0 && tmpStatus < INT_MAX - status ) { + out[i].copy ( temp, static_cast < unsigned > ( tmpStatus ) ); + status += tmpStatus; + } + else { + return -1; + } } - status += (int) nChar; } return status; } @@ -212,16 +222,28 @@ static int aitConvertFixedStringEnum16(void* d,const void* s, aitFixedString* out=(aitFixedString*)d; aitEnum16* in=(aitEnum16*)s; for (i=0;inumberOfStrings() ) { - pEnumStringTable->getString ( in[i], out[i].fixed_string, sizeof( out[i].fixed_string ) ); - nChar = pEnumStringTable->getStringLength ( in[i] ); + unsigned nChar = pEnumStringTable->getStringLength ( in[i] ); + if ( nChar < static_cast < unsigned > ( INT_MAX - status ) ) { + pEnumStringTable->getString ( + in[i], + out[i].fixed_string, + sizeof( out[i].fixed_string ) ); + status += static_cast < int > ( nChar ); + } + else { + return -1; + } } else { - nChar = sprintf(out[i].fixed_string,"%hu",in[i]); - assert (nChar>0); + int tmpStatus = sprintf ( out[i].fixed_string, "%hu", in[i] ); + if ( tmpStatus > 0 && tmpStatus < INT_MAX - status ) { + status += tmpStatus; + } + else { + return -1; + } } - status += (int) nChar; } return status; }