mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Yannick Lecaillez
22.52.2015 242140c76ae803f9d876aba8d07e60a104611e6d
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/ImportIDSet.java
@@ -134,17 +134,30 @@
    checkNotNull(importIdSet, "importIdSet must not be null");
    boolean definedBeforeMerge = isDefined();
    final long mergedSize = size() + importIdSet.size();
    final long mergedSize = addWithoutOverflow(entryIDSet.size(), importIdSet.entryIDSet.size());
    if (!importIdSet.isDefined() || mergedSize > indexEntryLimitSize) {
    if (!definedBeforeMerge || !importIdSet.isDefined() || mergedSize > indexEntryLimitSize)
    {
      entryIDSet = maintainCount ? newUndefinedSetWithSize(key, mergedSize) : newUndefinedSetWithKey(key);
      return definedBeforeMerge;
    } else if (isDefined() || maintainCount){
    }
    else if (isDefined() || maintainCount)
    {
      entryIDSet.addAll(importIdSet.entryIDSet);
    }
    return false;
  }
  private static long addWithoutOverflow(long a, long b) {
    /** a and b must be > 0 */
    final boolean willAdditionOverflow = (~(a ^ b) & (a ^ (a + b))) < 0;
    if (willAdditionOverflow) {
      return Long.MAX_VALUE;
    }
    return a + b;
  }
  /**
   * @return The current size of an import ID set.
   * @throws IllegalStateException if this set is undefined