Program: 1430
Project: 1430
Buggy source:
/** 
 * Runs the provided SQL and returns a cursor over the result set.
 * @param cursorFactory the cursor factory to use, or null for the default factory
 * @param sql the SQL query. The SQL string must not be ; terminated
 * @param selectionArgs You may include ?s in where clause in the query,which will be replaced by the values from selectionArgs. The values will be bound as Strings.
 * @param editTable the name of the first table, which is editable
 * @return A {@link Cursor} object, which is positioned before the first entry. Note that{@link Cursor}s are not synchronized, see the documentation for more details.
 */
public Cursor rawQueryWithFactory(CursorFactory cursorFactory,String sql,String[] selectionArgs,String editTable){
  if (!isOpen()) {
    throw new IllegalStateException("String_Node_Str");
  }
  long timeStart=0;
  if (Config.LOGV || mSlowQueryThreshold != -1) {
    timeStart=System.currentTimeMillis();
  }
  SQLiteCursorDriver driver=new SQLiteDirectCursorDriver(this,sql,editTable);
  Cursor cursor=null;
  try {
    cursor=driver.query(cursorFactory != null ? cursorFactory : mFactory,selectionArgs);
  }
  finally {
    if (Config.LOGV || mSlowQueryThreshold != -1) {
      int count=-1;
      if (cursor != null) {
        count=cursor.getCount();
      }
      long duration=System.currentTimeMillis() - timeStart;
      if (Config.LOGV || duration >= mSlowQueryThreshold) {
        Log.v(TAG,"String_Node_Str" + duration + "String_Node_Str"+ driver.toString()+ "String_Node_Str"+ (selectionArgs != null ? TextUtils.join("String_Node_Str",selectionArgs) : "String_Node_Str")+ "String_Node_Str"+ count);
      }
    }
  }
  return new CrossProcessCursorWrapper(cursor);
}

Fixed version (ground truth):
/** 
 * Runs the provided SQL and returns a cursor over the result set.
 * @param cursorFactory the cursor factory to use, or null for the default factory
 * @param sql the SQL query. The SQL string must not be ; terminated
 * @param selectionArgs You may include ?s in where clause in the query,which will be replaced by the values from selectionArgs. The values will be bound as Strings.
 * @param editTable the name of the first table, which is editable
 * @return A {@link Cursor} object, which is positioned before the first entry. Note that{@link Cursor}s are not synchronized, see the documentation for more details.
 */
public Cursor rawQueryWithFactory(CursorFactory cursorFactory,String sql,String[] selectionArgs,String editTable){
  if (!isOpen()) {
    throw new IllegalStateException("String_Node_Str");
  }
  long timeStart=0;
  if (Config.LOGV || mSlowQueryThreshold != -1) {
    timeStart=System.currentTimeMillis();
  }
  SQLiteCursorDriver driver=new SQLiteDirectCursorDriver(this,sql,editTable);
  Cursor cursor=null;
  try {
    cursor=driver.query(cursorFactory != null ? cursorFactory : mFactory,selectionArgs);
  }
  finally {
    if (Config.LOGV || mSlowQueryThreshold != -1) {
      int count=-1;
      if (cursor != null) {
        count=cursor.getCount();
      }
      long duration=System.currentTimeMillis() - timeStart;
      if (Config.LOGV || duration >= mSlowQueryThreshold) {
        Log.v(TAG,"String_Node_Str" + duration + "String_Node_Str"+ driver.toString()+ "String_Node_Str"+ count);
      }
    }
  }
  return new CrossProcessCursorWrapper(cursor);
}