Program: 61985
Project: 61985
Buggy source:
/** 
 * Reads list of actions from the stream. Reading ends with ActionEndFlag(=0) or end of the stream.
 * @param listeners
 * @param address
 * @param ip
 * @param rri
 * @param version
 * @param containerSWFOffset
 * @param endip
 * @param path
 * @return List of actions
 * @throws IOException
 */
public static List<Action> readActionList(List<DisassemblyListener> listeners,long containerSWFOffset,ReReadableInputStream rri,int version,int ip,int endIp,String path) throws IOException {
  boolean deobfuscate=Configuration.getConfig("String_Node_Str",true);
  ConstantPool cpool=new ConstantPool();
  SWFInputStream sis=new SWFInputStream(rri,version);
  List<Action> actionMap=new ArrayList<>();
  List<Long> nextOffsets=new ArrayList<>();
  Action entryAction=readActionListAtPos(listeners,containerSWFOffset,cpool,sis,rri,actionMap,nextOffsets,ip,ip,endIp,version,path,false,new ArrayList<Long>());
  Map<Action,List<Action>> containerLastActions=new HashMap<>();
  getContainerLastActions(actionMap,containerLastActions);
  List<Action> actions=new ArrayList<>();
  int index=getNextNotNullIndex(actionMap,0);
  if (index != -1 && entryAction != actionMap.get(index)) {
    ActionJump jump=new ActionJump(0);
    int size=getTotalActionLength(jump);
    jump.setJumpOffset((int)(entryAction.getAddress() - size));
    actions.add(jump);
  }
  index=getNextNotNullIndex(actionMap,index);
  while (index > -1) {
    Action action=actionMap.get(index);
    long nextOffset=nextOffsets.get(index);
    int nextIndex=getNextNotNullIndex(actionMap,index + 1);
    actions.add(action);
    if (nextIndex != -1 && nextOffset != nextIndex) {
      if (!action.isExit() && !(action instanceof ActionJump)) {
        ActionJump jump=new ActionJump(0);
        jump.setAddress(action.getAddress(),version);
        int size=getTotalActionLength(jump);
        jump.setJumpOffset((int)(nextOffset - action.getAddress() - size));
        actions.add(jump);
      }
    }
    index=nextIndex;
  }
  Map<Action,Action> jumps=new HashMap<>();
  getJumps(actions,jumps);
  long endAddress=updateAddresses(actions,ip,version);
  updateJumps(actions,jumps,containerLastActions,endAddress,version);
  updateActionStores(actions,jumps);
  updateContainerSizes(actions,containerLastActions);
  updateActionLengths(actions,version);
  Action lastAction=actions.get(actions.size() - 1);
  if (!(lastAction instanceof ActionEnd)) {
    Action aEnd=new ActionEnd();
    aEnd.setAddress(endAddress,version);
    actions.add(aEnd);
    endAddress+=getTotalActionLength(aEnd);
  }
  if (deobfuscate) {
    return deobfuscateActionList(listeners,containerSWFOffset,actions,version,0,path);
  }
  return actions;
}

Fixed version (ground truth):
/** 
 * Reads list of actions from the stream. Reading ends with ActionEndFlag(=0) or end of the stream.
 * @param listeners
 * @param containerSWFOffset
 * @param rri
 * @param version
 * @param ip
 * @param endIp
 * @param path
 * @return List of actions
 * @throws IOException
 */
public static List<Action> readActionList(List<DisassemblyListener> listeners,long containerSWFOffset,ReReadableInputStream rri,int version,int ip,int endIp,String path) throws IOException {
  boolean deobfuscate=Configuration.getConfig("String_Node_Str",true);
  ConstantPool cpool=new ConstantPool();
  SWFInputStream sis=new SWFInputStream(rri,version);
  List<Action> actionMap=new ArrayList<>();
  List<Long> nextOffsets=new ArrayList<>();
  Action entryAction=readActionListAtPos(listeners,containerSWFOffset,cpool,sis,rri,actionMap,nextOffsets,ip,ip,endIp,version,path,false,new ArrayList<Long>());
  Map<Action,List<Action>> containerLastActions=new HashMap<>();
  getContainerLastActions(actionMap,containerLastActions);
  List<Action> actions=new ArrayList<>();
  int index=getNextNotNullIndex(actionMap,0);
  if (index != -1 && entryAction != actionMap.get(index)) {
    ActionJump jump=new ActionJump(0);
    int size=getTotalActionLength(jump);
    jump.setJumpOffset((int)(entryAction.getAddress() - size));
    actions.add(jump);
  }
  index=getNextNotNullIndex(actionMap,index);
  while (index > -1) {
    Action action=actionMap.get(index);
    long nextOffset=nextOffsets.get(index);
    int nextIndex=getNextNotNullIndex(actionMap,index + 1);
    actions.add(action);
    if (nextIndex != -1 && nextOffset != nextIndex) {
      if (!action.isExit() && !(action instanceof ActionJump)) {
        ActionJump jump=new ActionJump(0);
        jump.setAddress(action.getAddress(),version);
        int size=getTotalActionLength(jump);
        jump.setJumpOffset((int)(nextOffset - action.getAddress() - size));
        actions.add(jump);
      }
    }
    index=nextIndex;
  }
  Map<Action,Action> jumps=new HashMap<>();
  getJumps(actions,jumps);
  long endAddress=updateAddresses(actions,ip,version);
  updateJumps(actions,jumps,containerLastActions,endAddress,version);
  updateActionStores(actions,jumps);
  updateContainerSizes(actions,containerLastActions);
  updateActionLengths(actions,version);
  Action lastAction=actions.get(actions.size() - 1);
  if (!(lastAction instanceof ActionEnd)) {
    Action aEnd=new ActionEnd();
    aEnd.setAddress(endAddress,version);
    actions.add(aEnd);
    endAddress+=getTotalActionLength(aEnd);
  }
  if (deobfuscate) {
    return deobfuscateActionList(listeners,containerSWFOffset,actions,version,0,path);
  }
  return actions;
}