Once more, fix idl_intersection. Don't walk past end of arrays.

This commit is contained in:
Howard Chu 2002-05-15 03:05:05 +00:00
parent a2d310f92e
commit d2ee3d52a3

View File

@ -1058,6 +1058,9 @@ idl_intersection(
if ( ID_BLOCK_ALLIDS( b ) ) { if ( ID_BLOCK_ALLIDS( b ) ) {
return( idl_dup( a ) ); return( idl_dup( a ) );
} }
if ( ID_BLOCK_NIDS(a) == 0 || ID_BLOCK_NIDS(b) == 0 ) {
return( NULL );
}
n = idl_dup( idl_min( a, b ) ); n = idl_dup( idl_min( a, b ) );
@ -1066,24 +1069,21 @@ idl_intersection(
idl_check(b); idl_check(b);
#endif #endif
for ( ni = 0, ai = 0, bi = 0; ai < ID_BLOCK_NIDS(a); ai++ ) { for ( ni = 0, ai = 0, bi = 0; ; ) {
if ( ID_BLOCK_ID(a, ai) < ID_BLOCK_ID(b, bi) ) {
continue;
}
for ( ;
bi < ID_BLOCK_NIDS(b) && ID_BLOCK_ID(b, bi) < ID_BLOCK_ID(a, ai);
bi++ )
{
; /* NULL */
}
if ( bi == ID_BLOCK_NIDS(b) ) {
break;
}
if ( ID_BLOCK_ID(b, bi) == ID_BLOCK_ID(a, ai) ) { if ( ID_BLOCK_ID(b, bi) == ID_BLOCK_ID(a, ai) ) {
ID_BLOCK_ID(n, ni++) = ID_BLOCK_ID(a, ai); ID_BLOCK_ID(n, ni++) = ID_BLOCK_ID(a, ai);
ai++;
bi++; bi++;
if ( ai >= ID_BLOCK_NIDS(a) || bi >= ID_BLOCK_NIDS(b) )
break;
} else if ( ID_BLOCK_ID(a, ai) < ID_BLOCK_ID(b, bi) ) {
ai++;
if ( ai >= ID_BLOCK_NIDS(a) )
break;
} else {
bi++;
if ( bi >= ID_BLOCK_NIDS(b) )
break;
} }
} }