Program: 192115
Project: 192115
Buggy source:
/** 
 * Request fingerprint enrollment. This call warms up the fingerprint hardware and starts scanning for fingerprints. Progress will be indicated by callbacks to the  {@link EnrollmentCallback} object. It terminates when{@link EnrollmentCallback#onEnrollmentError(int,CharSequence)} or{@link EnrollmentCallback#onEnrollmentProgress(int) is called with remaining == 0, atwhich point the object is no longer valid. The operation can be canceled by using the provided cancel object.}
 * @param token a unique token provided by a recent creation or verification of devicecredentials (e.g. pin, pattern or password).
 * @param cancel an object that can be used to cancel enrollment
 * @param flags optional flags
 * @param userId the user to whom this fingerprint will belong to
 * @param callback an object to receive enrollment events
 * @hide
 */
@RequiresPermission(MANAGE_FINGERPRINT) public void enroll(byte[] token,CancellationSignal cancel,int flags,int userId,EnrollmentCallback callback){
  if (userId == UserHandle.USER_CURRENT) {
    userId=getCurrentUserId();
  }
  if (callback == null) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  if (cancel != null) {
    if (cancel.isCanceled()) {
      Log.w(TAG,"String_Node_Str");
      return;
    }
 else {
      cancel.setOnCancelListener(new OnEnrollCancelListener());
    }
  }
  if (mService != null)   try {
    mEnrollmentCallback=callback;
    mService.enroll(mToken,token,userId,mServiceReceiver,flags);
  }
 catch (  RemoteException e) {
    Log.w(TAG,"String_Node_Str",e);
    if (callback != null) {
      callback.onEnrollmentError(FINGERPRINT_ERROR_HW_UNAVAILABLE,getErrorString(FINGERPRINT_ERROR_HW_UNAVAILABLE));
    }
  }
}

Fixed version (ground truth):
/** 
 * Request fingerprint enrollment. This call warms up the fingerprint hardware and starts scanning for fingerprints. Progress will be indicated by callbacks to the  {@link EnrollmentCallback} object. It terminates when{@link EnrollmentCallback#onEnrollmentError(int,CharSequence)} or{@link EnrollmentCallback#onEnrollmentProgress(int) is called with remaining == 0, atwhich point the object is no longer valid. The operation can be canceled by using the provided cancel object.}
 * @param token a unique token provided by a recent creation or verification of devicecredentials (e.g. pin, pattern or password).
 * @param cancel an object that can be used to cancel enrollment
 * @param flags optional flags
 * @param userId the user to whom this fingerprint will belong to
 * @param callback an object to receive enrollment events
 * @hide
 */
@RequiresPermission(MANAGE_FINGERPRINT) public void enroll(byte[] token,CancellationSignal cancel,int flags,int userId,EnrollmentCallback callback){
  if (userId == UserHandle.USER_CURRENT) {
    userId=getCurrentUserId();
  }
  if (callback == null) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  if (cancel != null) {
    if (cancel.isCanceled()) {
      Log.w(TAG,"String_Node_Str");
      return;
    }
 else {
      cancel.setOnCancelListener(new OnEnrollCancelListener());
    }
  }
  if (mService != null)   try {
    mEnrollmentCallback=callback;
    mService.enroll(mToken,token,userId,mServiceReceiver,flags,mContext.getOpPackageName());
  }
 catch (  RemoteException e) {
    Log.w(TAG,"String_Node_Str",e);
    if (callback != null) {
      callback.onEnrollmentError(FINGERPRINT_ERROR_HW_UNAVAILABLE,getErrorString(FINGERPRINT_ERROR_HW_UNAVAILABLE));
    }
  }
}