mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-03-01 14:15:49 +08:00
Once more, fix idl_intersection. Don't walk past end of arrays.
This commit is contained in:
parent
a2d310f92e
commit
d2ee3d52a3
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user