Program: 96293
Project: 96293
Buggy source:
public static void install(){
  if (!OS.isGnome()) {
    return;
  }
  boolean hasTopIcons;
  boolean hasSystemTray;
  String gnomeVersion=OS.getGnomeVersion();
  if (gnomeVersion == null) {
    return;
  }
  List<String> enabledExtensions=getEnabledExtensions();
  hasTopIcons=enabledExtensions.contains("String_Node_Str");
  hasSystemTray=enabledExtensions.contains(UID);
  if (hasTopIcons) {
    return;
  }
  System.setProperty("String_Node_Str","String_Node_Str");
  String userHome=System.getProperty("String_Node_Str");
  final File file=new File(userHome + "String_Node_Str" + UID);
  final File metaDatafile=new File(file,"String_Node_Str");
  final File extensionFile=new File(file,"String_Node_Str");
  final int indexOf=gnomeVersion.indexOf('.');
  final int nextIndexOf=gnomeVersion.indexOf('.',indexOf + 1);
  if (indexOf < nextIndexOf) {
    gnomeVersion=gnomeVersion.substring(0,nextIndexOf);
  }
  String metadata="String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str" + gnomeVersion + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ UID+ "String_Node_Str"+ "String_Node_Str"+ SystemTray.getVersion()+ "String_Node_Str"+ "String_Node_Str";
  logger.debug("String_Node_Str");
  if (hasSystemTray) {
    if (SystemTray.DEBUG) {
      logger.debug("String_Node_Str");
    }
    StringBuilder builder=new StringBuilder(256);
    BufferedReader bin=null;
    try {
      bin=new BufferedReader(new FileReader(metaDatafile));
      String line;
      while ((line=bin.readLine()) != null) {
        builder.append(line).append("String_Node_Str");
      }
    }
 catch (    FileNotFoundException ignored) {
    }
catch (    IOException ignored) {
    }
 finally {
      IO.close(bin,logger);
    }
    if (metadata.equals(builder.toString())) {
      if (!SystemTray.DEBUG) {
        return;
      }
 else {
        logger.debug("String_Node_Str");
        hasSystemTray=false;
      }
    }
 else {
      logger.debug("String_Node_Str");
    }
  }
  if (!file.isDirectory()) {
    final boolean mkdirs=file.mkdirs();
    if (!mkdirs) {
      final String msg="String_Node_Str" + file;
      logger.error(msg);
      return;
    }
  }
  BufferedWriter outputWriter=null;
  try {
    outputWriter=new BufferedWriter(new FileWriter(metaDatafile,false));
    outputWriter.write(metadata);
    outputWriter.flush();
    outputWriter.close();
  }
 catch (  IOException e) {
    logger.error("String_Node_Str",e);
  }
 finally {
    IO.close(outputWriter,logger);
  }
  if (!hasSystemTray) {
    InputStream reader=null;
    FileOutputStream fileOutputStream=null;
    try {
      reader=Extension.class.getResourceAsStream("String_Node_Str");
      fileOutputStream=new FileOutputStream(extensionFile);
      if (reader == null) {
        logger.error("String_Node_Str");
        return;
      }
      IO.copyStream(reader,fileOutputStream);
    }
 catch (    FileNotFoundException e) {
      logger.error("String_Node_Str",e);
    }
catch (    IOException e) {
      logger.error("String_Node_Str",e);
    }
 finally {
      IO.close(reader,logger);
      IO.close(fileOutputStream,logger);
    }
    logger.debug("String_Node_Str");
    enabledExtensions.add(UID);
    setEnabledExtensions(enabledExtensions);
    restartShell();
  }
}

Fixed version (ground truth):
public static void install(){
  if (!ENABLE_EXTENSION_INSTALL || !OS.isGnome()) {
    return;
  }
  boolean hasTopIcons;
  boolean hasSystemTray;
  String gnomeVersion=OS.getGnomeVersion();
  if (gnomeVersion == null) {
    return;
  }
  List<String> enabledExtensions=getEnabledExtensions();
  hasTopIcons=enabledExtensions.contains("String_Node_Str");
  hasSystemTray=enabledExtensions.contains(UID);
  if (hasTopIcons) {
    return;
  }
  System.setProperty("String_Node_Str","String_Node_Str");
  String userHome=System.getProperty("String_Node_Str");
  final File file=new File(userHome + "String_Node_Str" + UID);
  final File metaDatafile=new File(file,"String_Node_Str");
  final File extensionFile=new File(file,"String_Node_Str");
  final int indexOf=gnomeVersion.indexOf('.');
  final int nextIndexOf=gnomeVersion.indexOf('.',indexOf + 1);
  if (indexOf < nextIndexOf) {
    gnomeVersion=gnomeVersion.substring(0,nextIndexOf);
  }
  String metadata="String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str" + gnomeVersion + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ UID+ "String_Node_Str"+ "String_Node_Str"+ SystemTray.getVersion()+ "String_Node_Str"+ "String_Node_Str";
  logger.debug("String_Node_Str");
  if (hasSystemTray) {
    if (SystemTray.DEBUG) {
      logger.debug("String_Node_Str");
    }
    StringBuilder builder=new StringBuilder(256);
    BufferedReader bin=null;
    try {
      bin=new BufferedReader(new FileReader(metaDatafile));
      String line;
      while ((line=bin.readLine()) != null) {
        builder.append(line).append("String_Node_Str");
      }
    }
 catch (    FileNotFoundException ignored) {
    }
catch (    IOException ignored) {
    }
 finally {
      IO.close(bin,logger);
    }
    if (metadata.equals(builder.toString())) {
      if (!SystemTray.DEBUG) {
        return;
      }
 else {
        logger.debug("String_Node_Str");
        hasSystemTray=false;
      }
    }
 else {
      logger.debug("String_Node_Str");
    }
  }
  if (!file.isDirectory()) {
    final boolean mkdirs=file.mkdirs();
    if (!mkdirs) {
      final String msg="String_Node_Str" + file;
      logger.error(msg);
      return;
    }
  }
  BufferedWriter outputWriter=null;
  try {
    outputWriter=new BufferedWriter(new FileWriter(metaDatafile,false));
    outputWriter.write(metadata);
    outputWriter.flush();
    outputWriter.close();
  }
 catch (  IOException e) {
    logger.error("String_Node_Str",e);
  }
 finally {
    IO.close(outputWriter,logger);
  }
  if (!hasSystemTray) {
    InputStream reader=null;
    FileOutputStream fileOutputStream=null;
    try {
      reader=Extension.class.getResourceAsStream("String_Node_Str");
      fileOutputStream=new FileOutputStream(extensionFile);
      if (reader == null) {
        logger.error("String_Node_Str");
        return;
      }
      IO.copyStream(reader,fileOutputStream);
    }
 catch (    FileNotFoundException e) {
      logger.error("String_Node_Str",e);
    }
catch (    IOException e) {
      logger.error("String_Node_Str",e);
    }
 finally {
      IO.close(reader,logger);
      IO.close(fileOutputStream,logger);
    }
    logger.debug("String_Node_Str");
    enabledExtensions.add(UID);
    setEnabledExtensions(enabledExtensions);
    restartShell();
  }
}