Fix a bad free space check in icvGrowSeq.
authorBoris Daskalov <boris@hyperscience.com>
Tue, 17 Mar 2015 14:23:03 +0000 (16:23 +0200)
committerBoris Daskalov <boris@hyperscience.com>
Thu, 19 Mar 2015 15:32:32 +0000 (17:32 +0200)
A difference of two pointers was casted to unsigned which can lead to
overflow on 64-bit systems.

modules/core/src/datastructs.cpp

index 9438fa2..76c3b2c 100644 (file)
@@ -645,7 +645,7 @@ icvGrowSeq( CvSeq *seq, int in_front_of )
         /* If there is a free space just after last allocated block
            and it is big enough then enlarge the last block.
            This can happen only if the new block is added to the end of sequence: */
-        if( (unsigned)(ICV_FREE_PTR(storage) - seq->block_max) < CV_STRUCT_ALIGN &&
+        if( (size_t)(ICV_FREE_PTR(storage) - seq->block_max) < CV_STRUCT_ALIGN &&
             storage->free_space >= seq->elem_size && !in_front_of )
         {
             int delta = storage->free_space / elem_size;