Changeset 11303
- Timestamp:
- 04/20/07 10:27:57 (2 years ago)
- Files:
-
- trunk/gdal/frmts/hfa/hfa_p.h (modified) (2 diffs)
- trunk/gdal/frmts/hfa/hfafield.cpp (modified) (4 diffs)
- trunk/gdal/frmts/hfa/hfatype.cpp (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/gdal/frmts/hfa/hfa_p.h
r10645 r11303 306 306 const char *pszPrefix = NULL ); 307 307 308 int GetInstBytes( GByte * pabyData);308 int GetInstBytes( GByte *, int ); 309 309 int GetInstCount( GByte * pabyData ); 310 310 }; … … 336 336 void Dump( FILE * ); 337 337 338 int GetInstBytes( GByte * pabyData);338 int GetInstBytes( GByte *, int ); 339 339 int GetInstCount( const char *pszField, 340 340 GByte *pabyData, GUInt32 nDataOffset, int nDataSize); trunk/gdal/frmts/hfa/hfafield.cpp
r10645 r11303 647 647 { 648 648 for( iIndexCounter = 0; 649 iIndexCounter < nIndexValue ;649 iIndexCounter < nIndexValue && nExtraOffset < nDataSize; 650 650 iIndexCounter++ ) 651 651 { 652 652 nExtraOffset += 653 poItemObjectType->GetInstBytes(pabyData+nExtraOffset); 653 poItemObjectType->GetInstBytes(pabyData + nExtraOffset, 654 nDataSize - nExtraOffset); 654 655 } 655 656 } 656 657 657 if( pszField != NULL && strlen(pszField) > 0 ) 658 if( pszField != NULL && strlen(pszField) > 0 659 && nExtraOffset < nDataSize ) 658 660 { 659 661 return( poItemObjectType-> … … 916 918 { 917 919 nExtraOffset += 918 poItemObjectType->GetInstBytes(pabyData+nExtraOffset); 920 poItemObjectType->GetInstBytes(pabyData + nExtraOffset, 921 nDataSize - nExtraOffset); 919 922 } 920 923 } … … 985 988 /************************************************************************/ 986 989 987 int HFAField::GetInstBytes( GByte * pabyData)990 int HFAField::GetInstBytes( GByte *pabyData, int nDataSize ) 988 991 989 992 { … … 1034 1037 int nThisBytes; 1035 1038 1036 nThisBytes = poItemObjectType->GetInstBytes( pabyData ); 1039 nThisBytes = 1040 poItemObjectType->GetInstBytes( pabyData, 1041 nDataSize - nInstBytes ); 1037 1042 nInstBytes += nThisBytes; 1038 1043 pabyData += nThisBytes; trunk/gdal/frmts/hfa/hfatype.cpp
r10645 r11303 232 232 /* -------------------------------------------------------------------- */ 233 233 nByteOffset = 0; 234 for( iField = 0; iField < nFields ; iField++ )234 for( iField = 0; iField < nFields && nByteOffset < nDataSize; iField++ ) 235 235 { 236 236 if( EQUALN(pszFieldPath,papoFields[iField]->pszFieldName,nNameLen) … … 240 240 } 241 241 242 nByteOffset += papoFields[iField]->GetInstBytes(pabyData+nByteOffset); 243 } 244 245 if( iField == nFields ) 242 nByteOffset += 243 papoFields[iField]->GetInstBytes( pabyData+nByteOffset, 244 nDataSize - nByteOffset ); 245 } 246 247 if( iField == nFields || nByteOffset >= nDataSize ) 246 248 return CE_Failure; 247 249 … … 303 305 /* -------------------------------------------------------------------- */ 304 306 nByteOffset = 0; 305 for( iField = 0; iField < nFields ; iField++ )307 for( iField = 0; iField < nFields && nByteOffset < nDataSize; iField++ ) 306 308 { 307 309 if( EQUALN(pszFieldPath,papoFields[iField]->pszFieldName,nNameLen) … … 311 313 } 312 314 313 nByteOffset += papoFields[iField]->GetInstBytes(pabyData+nByteOffset); 314 } 315 316 if( iField == nFields ) 315 nByteOffset += 316 papoFields[iField]->GetInstBytes( pabyData + nByteOffset, 317 nDataSize - nByteOffset ); 318 } 319 320 if( iField == nFields || nByteOffset >= nDataSize ) 317 321 return -1; 318 322 … … 385 389 /* -------------------------------------------------------------------- */ 386 390 nByteOffset = 0; 387 for( iField = 0; iField < nFields ; iField++ )391 for( iField = 0; iField < nFields && nByteOffset < nDataSize; iField++ ) 388 392 { 389 393 if( EQUALN(pszFieldPath,papoFields[iField]->pszFieldName,nNameLen) … … 393 397 } 394 398 395 nByteOffset += papoFields[iField]->GetInstBytes(pabyData+nByteOffset); 396 } 397 398 if( iField == nFields ) 399 nByteOffset += 400 papoFields[iField]->GetInstBytes( pabyData + nByteOffset, 401 nDataSize - nByteOffset ); 402 } 403 404 if( iField == nFields || nByteOffset >= nDataSize ) 399 405 return FALSE; 400 406 … … 416 422 417 423 void HFAType::DumpInstValue( FILE * fpOut, 418 GByte *pabyData, GUInt32 nDataOffset, int nDataSize,419 const char * pszPrefix )424 GByte *pabyData, GUInt32 nDataOffset, 425 int nDataSize, const char * pszPrefix ) 420 426 421 427 { 422 428 int iField; 423 429 424 for ( iField = 0; iField < nFields; iField++ )430 for ( iField = 0; iField < nFields && nDataSize > 0; iField++ ) 425 431 { 426 432 HFAField *poField = papoFields[iField]; … … 430 436 nDataSize, pszPrefix ); 431 437 432 nInstBytes = poField->GetInstBytes( pabyData );438 nInstBytes = poField->GetInstBytes( pabyData, nDataSize ); 433 439 434 440 pabyData += nInstBytes; … … 444 450 /************************************************************************/ 445 451 446 int HFAType::GetInstBytes( GByte * pabyData)452 int HFAType::GetInstBytes( GByte *pabyData, int nDataSize ) 447 453 448 454 { … … 454 460 int iField; 455 461 456 for( iField = 0; iField < nFields ; iField++ )462 for( iField = 0; iField < nFields && nTotal < nDataSize; iField++ ) 457 463 { 458 464 HFAField *poField = papoFields[iField]; 459 int nInstBytes; 460 461 nInstBytes = poField->GetInstBytes( pabyData);465 466 int nInstBytes = poField->GetInstBytes( pabyData, 467 nDataSize - nTotal ); 462 468 463 469 pabyData += nInstBytes;
