Program: 5478
Project: 5478
Buggy source:
public MapTable getMap(){
  MapTable map=new MapTable();
  int sAddrHighest=-1;
  ELFSection name=sections[symTable.link];
  int len=symTable.size;
  int count=len / symTable.getEntrySize();
  int addr=symTable.getOffset();
  String currentFile=null;
  if (DEBUG) {
    System.out.println("String_Node_Str" + count);
  }
  int currentAddress=0;
  for (int i=0, n=count; i < n; i++) {
    setPos(addr);
    int nI=readElf32();
    String sn=name.getName(nI);
    int sAddr=readElf32();
    int size=readElf32();
    int info=readElf8();
    int bind=info >> 4;
    int type=info & 0xf;
    if (type == ELFSection.SYMTYPE_NONE && sn != null) {
      if ("String_Node_Str".equals(sn)) {
        if (currentFile != null) {
          files.add(new FileInfo(currentFile,currentAddress,sAddr));
          currentAddress=sAddr;
        }
      }
 else       if (!sn.startsWith("String_Node_Str")) {
        map.setEntry(new MapEntry(MapEntry.TYPE.variable,sAddr,0,sn,currentFile,false));
      }
    }
    if (type == ELFSection.SYMTYPE_FILE) {
      currentFile=sn;
    }
    if (DEBUG) {
      System.out.println("String_Node_Str" + sn + "String_Node_Str"+ Integer.toString(sAddr,16)+ "String_Node_Str"+ bind+ "String_Node_Str"+ type+ "String_Node_Str"+ size);
    }
    if (sAddr > 0 && sAddr < 0x100000) {
      String symbolName=sn;
      if (sAddr < 0x5c00 && sAddr > sAddrHighest) {
        sAddrHighest=sAddr;
      }
      if ("String_Node_Str".equals(symbolName)) {
        map.setHeapStart(sAddr);
      }
 else       if ("String_Node_Str".equals(symbolName)) {
        map.setStackStart(sAddr);
      }
      if (type == ELFSection.SYMTYPE_FUNCTION) {
        String file=lookupFile(sAddr);
        if (file == null) {
          file=currentFile;
        }
        map.setEntry(new MapEntry(MapEntry.TYPE.function,sAddr,0,symbolName,file,bind == ELFSection.SYMBIND_LOCAL));
      }
 else       if (type == ELFSection.SYMTYPE_OBJECT) {
        String file=lookupFile(sAddr);
        if (file == null) {
          file=currentFile;
        }
        map.setEntry(new MapEntry(MapEntry.TYPE.variable,sAddr,size,symbolName,file,bind == ELFSection.SYMBIND_LOCAL));
      }
 else {
        if (DEBUG) {
          System.out.println("String_Node_Str" + symbolName + "String_Node_Str"+ Integer.toString(sAddr,16)+ "String_Node_Str"+ currentFile+ "String_Node_Str");
        }
      }
    }
    addr+=symTable.getEntrySize();
  }
  if (sAddrHighest > 0) {
    System.out.printf("String_Node_Str",sAddrHighest);
    map.setHeapStart(sAddrHighest);
  }
  return map;
}

Fixed version (ground truth):
public MapTable getMap(){
  MapTable map=new MapTable();
  int sAddrHighest=-1;
  ELFSection name=sections[symTable.link];
  int len=symTable.size;
  int count=len / symTable.getEntrySize();
  int addr=symTable.getOffset();
  String currentFile=null;
  if (DEBUG) {
    System.out.println("String_Node_Str" + count);
  }
  int currentAddress=0;
  for (int i=0, n=count; i < n; i++) {
    setPos(addr);
    int nI=readElf32();
    String sn=name.getName(nI);
    int sAddr=readElf32();
    int size=readElf32();
    int info=readElf8();
    int bind=info >> 4;
    int type=info & 0xf;
    if (type == ELFSection.SYMTYPE_NONE && sn != null) {
      if ("String_Node_Str".equals(sn)) {
        if (currentFile != null) {
          files.add(new FileInfo(currentFile,currentAddress,sAddr));
          currentAddress=sAddr;
        }
      }
 else       if (!sn.startsWith("String_Node_Str")) {
        map.setEntry(new MapEntry(MapEntry.TYPE.variable,sAddr,0,sn,currentFile,false));
      }
    }
    if (type == ELFSection.SYMTYPE_FILE) {
      currentFile=sn;
    }
    if (DEBUG) {
      System.out.println("String_Node_Str" + sn + "String_Node_Str"+ Integer.toString(sAddr,16)+ "String_Node_Str"+ bind+ "String_Node_Str"+ type+ "String_Node_Str"+ size);
    }
    if (sAddr > 0 && sAddr < 0x100000) {
      String symbolName=sn;
      if (sAddr < 0x5c00 && sAddr > sAddrHighest) {
        sAddrHighest=sAddr;
      }
      if ("String_Node_Str".equals(symbolName)) {
        map.setHeapStart(sAddr);
      }
 else       if ("String_Node_Str".equals(symbolName)) {
        map.setStackStart(sAddr);
      }
      if (type == ELFSection.SYMTYPE_FUNCTION) {
        String file=lookupFile(sAddr);
        if (file == null) {
          file=currentFile;
        }
        map.setEntry(new MapEntry(MapEntry.TYPE.function,sAddr,0,symbolName,file,bind == ELFSection.SYMBIND_LOCAL));
      }
 else       if (type == ELFSection.SYMTYPE_OBJECT) {
        String file=lookupFile(sAddr);
        if (file == null) {
          file=currentFile;
        }
        map.setEntry(new MapEntry(MapEntry.TYPE.variable,sAddr,size,symbolName,file,bind == ELFSection.SYMBIND_LOCAL));
      }
 else {
        if (DEBUG) {
          System.out.println("String_Node_Str" + symbolName + "String_Node_Str"+ Integer.toString(sAddr,16)+ "String_Node_Str"+ currentFile+ "String_Node_Str");
        }
      }
    }
    addr+=symTable.getEntrySize();
  }
  if (map.getHeapStart() <= 0 && sAddrHighest > 0) {
    System.err.printf("String_Node_Str",sAddrHighest);
    map.setHeapStart(sAddrHighest);
  }
  return map;
}