Program: 46444
Project: 46444
Buggy source:
/** 
 * Checks every single author int the passed argument whether they're already exisiting. If so, it only links the author with the book, otherwise, the author will be created and linked, too.
 * @param book to book to be linked with
 * @param authorsString the authors string, formatted as "<code>name surname, name surname</code>" and so on.
 * @throws SQLException if something goes wrong during database operations
 */
public void saveAuthors(Book book,String authorsString) throws SQLException {
  removeAllLinks(book);
  String[] names=authorsString.split("String_Node_Str");
  String[][] authornames=new String[names.length][2];
  for (int i=0; i < names.length; i++) {
    String[] s=new String[2];
    s[0]=names[i].substring(0,names[i].lastIndexOf("String_Node_Str")).trim();
    s[1]=names[i].substring(names[i].lastIndexOf("String_Node_Str") + 1).trim();
    authornames[i]=s;
  }
  for (  String[] name : authornames) {
    AuthorQuest quest=new AuthorQuest();
    quest.addStringCondition("String_Node_Str",name[0],SQLOperator.AND);
    quest.addStringCondition("String_Node_Str",name[1],SQLOperator.AND);
    ArrayList<Author> authors=reader.getAuthors(quest);
    if (authors.isEmpty()) {
      Author a=writer.createAuthor();
      a.setName(name[0]);
      a.setSurname(name[1]);
      a.setInformation("String_Node_Str");
      writer.updateAuthor(a);
      writer.linkAuthorBook(a,book);
    }
 else     if (authors.size() == 1) {
      Author a=authors.get(0);
      writer.linkAuthorBook(a,book);
    }
 else {
      JOptionPane.showMessageDialog(null,java.util.ResourceBundle.getBundle("String_Node_Str").getString("String_Node_Str"));
    }
  }
}

Fixed version (ground truth):
/** 
 * Checks every single author int the passed argument whether they're already exisiting. If so, it only links the author with the book, otherwise, the author will be created and linked, too.
 * @param book to book to be linked with
 * @param authorsString the authors string, formatted as"<code>name surname, name surname</code>" and so on.
 * @throws SQLException if something goes wrong during database operations
 */
public void saveAuthors(Book book,String authorsString) throws SQLException {
  removeAllLinks(book);
  if (!authorsString.equals("String_Node_Str")) {
    String[] names=authorsString.split("String_Node_Str");
    String[][] authornames=new String[names.length][2];
    for (int i=0; i < names.length; i++) {
      String[] s=new String[2];
      s[0]=names[i].substring(0,names[i].lastIndexOf("String_Node_Str")).trim();
      s[1]=names[i].substring(names[i].lastIndexOf("String_Node_Str") + 1).trim();
      authornames[i]=s;
    }
    for (    String[] name : authornames) {
      AuthorQuest quest=new AuthorQuest();
      quest.addStringCondition("String_Node_Str",name[0],SQLOperator.AND);
      quest.addStringCondition("String_Node_Str",name[1],SQLOperator.AND);
      ArrayList<Author> authors=reader.getAuthors(quest);
      if (authors.isEmpty()) {
        Author a=writer.createAuthor();
        a.setName(name[0]);
        a.setSurname(name[1]);
        a.setInformation("String_Node_Str");
        writer.updateAuthor(a);
        writer.linkAuthorBook(a,book);
      }
 else       if (authors.size() == 1) {
        Author a=authors.get(0);
        writer.linkAuthorBook(a,book);
      }
 else {
        JOptionPane.showMessageDialog(null,java.util.ResourceBundle.getBundle("String_Node_Str").getString("String_Node_Str"));
      }
    }
  }
}