Program: 79983
Project: 79983
Buggy source:
/** 
 * Constructor for a CursorNode
 * @param statementType      Type of statement (SELECT, UPDATE, INSERT)
 * @param resultSet          A ResultSetNode specifying the result set forthe cursor
 * @param name               The name of the cursor, null if no name
 * @param orderByList        The order by list for the cursor, null if noorder by list
 * @param offset             The value of a <result offset clause> ifpresent
 * @param fetchFirst         The value of a <fetch first clause> if present
 * @param hasJDBClimitClause True if the offset/fetchFirst clauses comefrom JDBC limit/offset escape syntax
 * @param updateMode         The user-specified update mode for the cursor,for example, CursorNode.READ_ONLY
 * @param updatableColumns   The array of updatable columns specified bythe user in the FOR UPDATE clause, null if no updatable columns specified.  May only be provided if the updateMode parameter is CursorNode.UPDATE.
 * @param cm                 The context manager
 */
CursorNode(String statementType,ResultSetNode resultSet,String name,OrderByList orderByList,ValueNode offset,ValueNode fetchFirst,boolean hasJDBClimitClause,int updateMode,String[] updatableColumns,ContextManager cm){
  super(resultSet,cm);
  this.name=name;
  this.statementType=statementType;
  this.orderByList=orderByList;
  this.offset=offset;
  this.fetchFirst=fetchFirst;
  this.hasJDBClimitClause=hasJDBClimitClause;
  this.updateMode=updateMode;
  this.updatableColumns=updatableColumns == null ? null : Arrays.asList(updatableColumns);
  if (SanityManager.DEBUG) {
    SanityManager.ASSERT(this.updatableColumns == null || this.updatableColumns.isEmpty() || this.updateMode == UPDATE,"String_Node_Str" + "String_Node_Str");
  }
}

Fixed version (ground truth):
/** 
 * Constructor for a CursorNode
 * @param statementType      Type of statement (SELECT, UPDATE, INSERT)
 * @param resultSet          A ResultSetNode specifying the result set forthe cursor
 * @param name               The name of the cursor, null if no name
 * @param orderByList        The order by list for the cursor, null if noorder by list
 * @param offset             The value of a <result offset clause> ifpresent
 * @param fetchFirst         The value of a <fetch first clause> if present
 * @param hasJDBClimitClause True if the offset/fetchFirst clauses comefrom JDBC limit/offset escape syntax
 * @param updateMode         The user-specified update mode for the cursor,for example, CursorNode.READ_ONLY
 * @param updatableColumns   The array of updatable columns specified bythe user in the FOR UPDATE clause, null if no updatable columns specified.  May only be provided if the updateMode parameter is CursorNode.UPDATE.
 * @param forMergeStatement True if this cursor is the driving left-join of a MERGE statement
 * @param cm                 The context manager
 */
CursorNode(String statementType,ResultSetNode resultSet,String name,OrderByList orderByList,ValueNode offset,ValueNode fetchFirst,boolean hasJDBClimitClause,int updateMode,String[] updatableColumns,boolean forMergeStatement,ContextManager cm){
  super(resultSet,cm);
  this.name=name;
  this.statementType=statementType;
  this.orderByList=orderByList;
  this.offset=offset;
  this.fetchFirst=fetchFirst;
  this.hasJDBClimitClause=hasJDBClimitClause;
  this.updateMode=updateMode;
  this.updatableColumns=updatableColumns == null ? null : Arrays.asList(updatableColumns);
  this.forMergeStatement=forMergeStatement;
  if (SanityManager.DEBUG) {
    SanityManager.ASSERT(this.updatableColumns == null || this.updatableColumns.isEmpty() || this.updateMode == UPDATE,"String_Node_Str" + "String_Node_Str");
  }
}