Program: 146689
Project: 146689
Buggy source:
/** 
 * Makes some (or all) of the table's resources available
 * @param master       The global resource to prepare against. Used toestablish whether resources need to be fetched remotely
 * @param instance     The instance (version and profile) to prepare against
 * @param toInitialize The ID of a single resource after which the tablepreparation can stop.
 * @throws UnresolvedResourceException       Required resource couldn't beidentified
 * @throws UnfullfilledRequirementsException resource(s) incompatible withcurrent CommCare version
 */
public void prepareResources(ResourceTable master,CommCareInstance instance,String toInitialize) throws UnresolvedResourceException, UnfullfilledRequirementsException {
  Stack<Resource> unreadyResources=getUnreadyResources();
  while (idNeedsInit(toInitialize) && !unreadyResources.isEmpty()) {
    for (    Resource r : unreadyResources) {
      boolean upgrade=false;
      Vector<Reference> invalid=new Vector<Reference>();
      if (master != null) {
        Resource peer=master.getResourceWithId(r.getResourceId());
        if (peer != null) {
          if (!r.isNewer(peer)) {
            peer.mimick(r);
            commit(peer,Resource.RESOURCE_STATUS_INSTALLED);
            continue;
          }
          upgrade=true;
          invalid=ResourceTable.gatherResourcesLocalRefs(peer,master);
        }
      }
      findResourceLocationAndInstall(r,invalid,upgrade,instance,master);
      if (stateListener != null) {
        stateListener.resourceStateUpdated(this);
      }
    }
    unreadyResources=getUnreadyResources();
  }
  if (toInitialize != null) {
    return;
  }
  for (  Resource stillPending : getResourcesWithStatus(Resource.RESOURCE_STATUS_PENDING)) {
    this.removeResource(stillPending);
  }
}

Fixed version (ground truth):
/** 
 * Makes some (or all) of the table's resources available
 * @param master       The global resource to prepare against. Used toestablish whether resources need to be fetched remotely
 * @param instance     The instance (version and profile) to prepare against
 * @param toInitialize The ID of a single resource after which the tablepreparation can stop.
 * @throws UnresolvedResourceException       Required resource couldn't beidentified
 * @throws UnfullfilledRequirementsException resource(s) incompatible withcurrent CommCare version
 */
public void prepareResources(ResourceTable master,CommCareInstance instance,String toInitialize) throws UnresolvedResourceException, UnfullfilledRequirementsException {
  Vector<Resource> unreadyResources=getUnreadyResources();
  while (idNeedsInit(toInitialize) && !unreadyResources.isEmpty()) {
    for (    Resource r : unreadyResources) {
      boolean upgrade=false;
      Vector<Reference> invalid=new Vector<Reference>();
      if (master != null) {
        Resource peer=master.getResourceWithId(r.getResourceId());
        if (peer != null) {
          if (!r.isNewer(peer)) {
            peer.mimick(r);
            commit(peer,Resource.RESOURCE_STATUS_INSTALLED);
            continue;
          }
          upgrade=true;
          invalid=ResourceTable.gatherResourcesLocalRefs(peer,master);
        }
      }
      findResourceLocationAndInstall(r,invalid,upgrade,instance,master);
      if (stateListener != null) {
        stateListener.resourceStateUpdated(this);
      }
    }
    unreadyResources=getUnreadyResources();
  }
  if (toInitialize != null) {
    return;
  }
  for (  Resource stillPending : getResourcesWithStatus(Resource.RESOURCE_STATUS_PENDING)) {
    this.removeResource(stillPending);
  }
}