Program: 62003
Project: 62003
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 address,long containerSWFOffset,ReReadableInputStream rri,int version,int ip,int endip,String path) throws IOException {
  List<Action> retdups=new ArrayList<>();
  ConstantPool cpool=new ConstantPool();
  Stack<GraphTargetItem> stack=new Stack<>();
  List<Object> localData=Helper.toList(new HashMap<Integer,String>(),new HashMap<String,GraphTargetItem>(),new HashMap<String,GraphTargetItem>());
  SWFInputStream sis=new SWFInputStream(rri,version);
  boolean goesPrev=false;
  int method=1;
  goesPrev=readActionListAtPos(listeners,new ArrayList<GraphTargetItem>(),new HashMap<Long,List<GraphSourceItemContainer>>(),address,containerSWFOffset,localData,stack,cpool,sis,rri,ip,retdups,ip,endip,path,new HashMap<Integer,Integer>(),false,new HashMap<Integer,HashMap<String,GraphTargetItem>>());
  if (goesPrev) {
  }
 else {
    if (!retdups.isEmpty()) {
      for (int i=0; i < ip; i++) {
        retdups.remove(0);
      }
    }
  }
  List<Action> ret=new ArrayList<>();
  Action last=null;
  for (  Action a : retdups) {
    if (a != last) {
      ret.add(a);
    }
    last=a;
  }
  for (int i=0; i < retdups.size(); i++) {
    Action a=retdups.get(i);
    if (a instanceof ActionEnd) {
      if (i < retdups.size() - 1) {
        ActionJump jmp=new ActionJump(0);
        jmp.setJumpOffset(retdups.size() - i - jmp.getBytes(version).length);
        a.replaceWith=jmp;
      }
    }
  }
  List<ConstantPool> pools;
  ret=Action.removeNops(0,ret,version,0,path);
  pools=getConstantPool(listeners,new ActionGraphSource(ret,version,new HashMap<Integer,String>(),new HashMap<String,GraphTargetItem>(),new HashMap<String,GraphTargetItem>()),0,version,path);
  if (pools.size() == 1) {
    Action.setConstantPool(ret,pools.get(0));
  }
  if (goesPrev && (!DEOBFUSCATION_ALL_CODE_IN_PREVIOUS_TAG)) {
    ActionJump aj=new ActionJump(ip);
    int skip=aj.getBytes(version).length;
    for (    GraphSourceItem s : ret) {
      if (s instanceof Action) {
        Action a=(Action)s;
        a.setAddress(a.getAddress() + skip,version);
      }
    }
    ret.add(0,aj);
  }
  String s=null;
  List<Action> reta=new ArrayList<>();
  for (  Object o : ret) {
    if (o instanceof Action) {
      reta.add((Action)o);
    }
  }
  return reta;
}

Fixed version (ground truth):
/** 
 * 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 {
  List<Action> retdups=new ArrayList<>();
  ConstantPool cpool=new ConstantPool();
  Stack<GraphTargetItem> stack=new Stack<>();
  List<Object> localData=Helper.toList(new HashMap<Integer,String>(),new HashMap<String,GraphTargetItem>(),new HashMap<String,GraphTargetItem>());
  SWFInputStream sis=new SWFInputStream(rri,version);
  boolean goesPrev=false;
  int method=1;
  goesPrev=readActionListAtPos(listeners,new ArrayList<GraphTargetItem>(),new HashMap<Long,List<GraphSourceItemContainer>>(),containerSWFOffset,localData,stack,cpool,sis,rri,ip,retdups,ip,endip,path,new HashMap<Integer,Integer>(),false,new HashMap<Integer,HashMap<String,GraphTargetItem>>());
  if (goesPrev) {
  }
 else {
    if (!retdups.isEmpty()) {
      for (int i=0; i < ip; i++) {
        retdups.remove(0);
      }
    }
  }
  List<Action> ret=new ArrayList<>();
  Action last=null;
  for (  Action a : retdups) {
    if (a != last) {
      ret.add(a);
    }
    last=a;
  }
  for (int i=0; i < retdups.size(); i++) {
    Action a=retdups.get(i);
    if (a instanceof ActionEnd) {
      if (i < retdups.size() - 1) {
        ActionJump jmp=new ActionJump(0);
        jmp.setJumpOffset(retdups.size() - i - jmp.getBytes(version).length);
        a.replaceWith=jmp;
      }
    }
  }
  if (Configuration.getConfig("String_Node_Str",true)) {
    ret=Action.removeNops(0,ret,version,0,path);
  }
  if (goesPrev && (!DEOBFUSCATION_ALL_CODE_IN_PREVIOUS_TAG)) {
    ActionJump aj=new ActionJump(ip);
    int skip=aj.getBytes(version).length;
    for (    GraphSourceItem s : ret) {
      if (s instanceof Action) {
        Action a=(Action)s;
        a.setAddress(a.getAddress() + skip,version);
      }
    }
    ret.add(0,aj);
  }
  String s=null;
  List<Action> reta=new ArrayList<>();
  for (  Object o : ret) {
    if (o instanceof Action) {
      reta.add((Action)o);
    }
  }
  return reta;
}