Program: 2448
Project: 2448
Buggy source:
/** 
 * Add a service to the list of services to be hosted. <p>Once a service has been addded to the the list, the service and it's included characteristics will be provided by the local device. <p>If the local device has already exposed services when this function is called, a service update notification will be sent to all clients. <p>Requires   {@link android.Manifest.permission#BLUETOOTH} permission.
 * @param service Service to be added to the list of services providedby this device.
 * @return true, if the service has been added successfully
 */
public boolean addService(BluetoothGattService service){
  if (DBG)   Log.d(TAG,"String_Node_Str" + service.getUuid());
  if (mService == null || mServerIf == 0)   return false;
  mServices.add(service);
  try {
    mService.beginServiceDeclaration(mServerIf,service.getType(),service.getInstanceId(),service.getHandles(),new ParcelUuid(service.getUuid()));
    List<BluetoothGattService> includedServices=service.getIncludedServices();
    for (    BluetoothGattService includedService : includedServices) {
      mService.addIncludedService(mServerIf,includedService.getType(),includedService.getInstanceId(),new ParcelUuid(includedService.getUuid()));
    }
    List<BluetoothGattCharacteristic> characteristics=service.getCharacteristics();
    for (    BluetoothGattCharacteristic characteristic : characteristics) {
      int permission=((characteristic.getKeySize() - 7) << 12) + characteristic.getPermissions();
      mService.addCharacteristic(mServerIf,new ParcelUuid(characteristic.getUuid()),characteristic.getProperties(),permission);
      List<BluetoothGattDescriptor> descriptors=characteristic.getDescriptors();
      for (      BluetoothGattDescriptor descriptor : descriptors) {
        mService.addDescriptor(mServerIf,new ParcelUuid(descriptor.getUuid()),descriptor.getPermissions());
      }
    }
    mService.endServiceDeclaration(mServerIf);
  }
 catch (  RemoteException e) {
    Log.e(TAG,"String_Node_Str",e);
    return false;
  }
  return true;
}

Fixed version (ground truth):
/** 
 * Add a service to the list of services to be hosted. <p>Once a service has been addded to the the list, the service and it's included characteristics will be provided by the local device. <p>If the local device has already exposed services when this function is called, a service update notification will be sent to all clients. <p>Requires   {@link android.Manifest.permission#BLUETOOTH} permission.
 * @param service Service to be added to the list of services providedby this device.
 * @return true, if the service has been added successfully
 */
public boolean addService(BluetoothGattService service){
  if (DBG)   Log.d(TAG,"String_Node_Str" + service.getUuid());
  if (mService == null || mServerIf == 0)   return false;
  mServices.add(service);
  try {
    mService.beginServiceDeclaration(mServerIf,service.getType(),service.getInstanceId(),service.getHandles(),new ParcelUuid(service.getUuid()));
    List<BluetoothGattService> includedServices=service.getIncludedServices();
    for (    BluetoothGattService includedService : includedServices) {
      mService.addIncludedService(mServerIf,includedService.getType(),includedService.getInstanceId(),new ParcelUuid(includedService.getUuid()));
    }
    List<BluetoothGattCharacteristic> characteristics=service.getCharacteristics();
    for (    BluetoothGattCharacteristic characteristic : characteristics) {
      int permission=((characteristic.getKeySize() - 7) << 12) + characteristic.getPermissions();
      mService.addCharacteristic(mServerIf,new ParcelUuid(characteristic.getUuid()),characteristic.getProperties(),permission);
      List<BluetoothGattDescriptor> descriptors=characteristic.getDescriptors();
      for (      BluetoothGattDescriptor descriptor : descriptors) {
        permission=((characteristic.getKeySize() - 7) << 12) + descriptor.getPermissions();
        mService.addDescriptor(mServerIf,new ParcelUuid(descriptor.getUuid()),permission);
      }
    }
    mService.endServiceDeclaration(mServerIf);
  }
 catch (  RemoteException e) {
    Log.e(TAG,"String_Node_Str",e);
    return false;
  }
  return true;
}