Program: 193870
Project: 193870
Buggy source:
@Override protected void dump(FileDescriptor fd,PrintWriter pw,String[] args){
  if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP) != PackageManager.PERMISSION_GRANTED) {
    pw.println("String_Node_Str" + Binder.getCallingPid() + "String_Node_Str"+ Binder.getCallingUid());
    return;
  }
synchronized (this) {
    pw.println("String_Node_Str");
    final long now=System.currentTimeMillis();
    boolean needSep=false;
    if (mOpModeWatchers.size() > 0) {
      needSep=true;
      pw.println("String_Node_Str");
      for (int i=0; i < mOpModeWatchers.size(); i++) {
        pw.print("String_Node_Str");
        pw.print(AppOpsManager.opToName(mOpModeWatchers.keyAt(i)));
        pw.println("String_Node_Str");
        ArrayList<Callback> callbacks=mOpModeWatchers.valueAt(i);
        for (int j=0; j < callbacks.size(); j++) {
          pw.print("String_Node_Str");
          pw.print(j);
          pw.print("String_Node_Str");
          pw.println(callbacks.get(j));
        }
      }
    }
    if (mPackageModeWatchers.size() > 0) {
      needSep=true;
      pw.println("String_Node_Str");
      for (int i=0; i < mPackageModeWatchers.size(); i++) {
        pw.print("String_Node_Str");
        pw.print(mPackageModeWatchers.keyAt(i));
        pw.println("String_Node_Str");
        ArrayList<Callback> callbacks=mPackageModeWatchers.valueAt(i);
        for (int j=0; j < callbacks.size(); j++) {
          pw.print("String_Node_Str");
          pw.print(j);
          pw.print("String_Node_Str");
          pw.println(callbacks.get(j));
        }
      }
    }
    if (mModeWatchers.size() > 0) {
      needSep=true;
      pw.println("String_Node_Str");
      for (int i=0; i < mModeWatchers.size(); i++) {
        pw.print("String_Node_Str");
        pw.print(mModeWatchers.keyAt(i));
        pw.print("String_Node_Str");
        pw.println(mModeWatchers.valueAt(i));
      }
    }
    if (mClients.size() > 0) {
      needSep=true;
      pw.println("String_Node_Str");
      for (int i=0; i < mClients.size(); i++) {
        pw.print("String_Node_Str");
        pw.print(mClients.keyAt(i));
        pw.println("String_Node_Str");
        ClientState cs=mClients.valueAt(i);
        pw.print("String_Node_Str");
        pw.println(cs);
        if (cs.mStartedOps != null && cs.mStartedOps.size() > 0) {
          pw.println("String_Node_Str");
          for (int j=0; j < cs.mStartedOps.size(); j++) {
            Op op=cs.mStartedOps.get(j);
            pw.print("String_Node_Str");
            pw.print("String_Node_Str");
            pw.print(op.uid);
            pw.print("String_Node_Str");
            pw.print(op.packageName);
            pw.print("String_Node_Str");
            pw.println(AppOpsManager.opToName(op.op));
          }
        }
      }
    }
    if (mAudioRestrictions.size() > 0) {
      boolean printedHeader=false;
      for (int o=0; o < mAudioRestrictions.size(); o++) {
        final String op=AppOpsManager.opToName(mAudioRestrictions.keyAt(o));
        final SparseArray<Restriction> restrictions=mAudioRestrictions.valueAt(o);
        for (int i=0; i < restrictions.size(); i++) {
          if (!printedHeader) {
            pw.println("String_Node_Str");
            printedHeader=true;
            needSep=true;
          }
          final int usage=restrictions.keyAt(i);
          pw.print("String_Node_Str");
          pw.print(op);
          pw.print("String_Node_Str");
          pw.print(AudioAttributes.usageToString(usage));
          Restriction r=restrictions.valueAt(i);
          pw.print("String_Node_Str");
          pw.println(r.mode);
          if (!r.exceptionPackages.isEmpty()) {
            pw.println("String_Node_Str");
            for (int j=0; j < r.exceptionPackages.size(); j++) {
              pw.print("String_Node_Str");
              pw.println(r.exceptionPackages.valueAt(j));
            }
          }
        }
      }
    }
    if (needSep) {
      pw.println();
    }
    for (int i=0; i < mUidStates.size(); i++) {
      UidState uidState=mUidStates.valueAt(i);
      pw.print("String_Node_Str");
      UserHandle.formatUid(pw,uidState.uid);
      pw.println("String_Node_Str");
      SparseIntArray opModes=uidState.opModes;
      if (opModes != null) {
        final int opModeCount=opModes.size();
        for (int j=0; j < opModeCount; j++) {
          final int code=opModes.keyAt(j);
          final int mode=opModes.valueAt(j);
          pw.print("String_Node_Str");
          pw.print(AppOpsManager.opToName(code));
          pw.print("String_Node_Str");
          pw.println(mode);
        }
      }
      ArrayMap<String,Ops> pkgOps=uidState.pkgOps;
      if (pkgOps == null) {
        continue;
      }
      for (      Ops ops : pkgOps.values()) {
        pw.print("String_Node_Str");
        pw.print(ops.packageName);
        pw.println("String_Node_Str");
        for (int j=0; j < ops.size(); j++) {
          Op op=ops.valueAt(j);
          pw.print("String_Node_Str");
          pw.print(AppOpsManager.opToName(op.op));
          pw.print("String_Node_Str");
          pw.print(op.mode);
          if (op.time != 0) {
            pw.print("String_Node_Str");
            TimeUtils.formatDuration(now - op.time,pw);
            pw.print("String_Node_Str");
          }
          if (op.rejectTime != 0) {
            pw.print("String_Node_Str");
            TimeUtils.formatDuration(now - op.rejectTime,pw);
            pw.print("String_Node_Str");
          }
          if (op.duration == -1) {
            pw.print("String_Node_Str");
          }
 else           if (op.duration != 0) {
            pw.print("String_Node_Str");
            TimeUtils.formatDuration(op.duration,pw);
          }
          pw.println();
        }
      }
    }
  }
}

Fixed version (ground truth):
@Override protected void dump(FileDescriptor fd,PrintWriter pw,String[] args){
  if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP) != PackageManager.PERMISSION_GRANTED) {
    pw.println("String_Node_Str" + Binder.getCallingPid() + "String_Node_Str"+ Binder.getCallingUid());
    return;
  }
  if (args != null) {
    for (int i=0; i < args.length; i++) {
      String arg=args[i];
      if ("String_Node_Str".equals(arg)) {
        dumpHelp(pw);
        return;
      }
 else       if ("String_Node_Str".equals(arg)) {
        long token=Binder.clearCallingIdentity();
        try {
synchronized (this) {
            mHandler.removeCallbacks(mWriteRunner);
          }
          writeState();
          pw.println("String_Node_Str");
        }
  finally {
          Binder.restoreCallingIdentity(token);
        }
        return;
      }
 else       if ("String_Node_Str".equals(arg)) {
        long token=Binder.clearCallingIdentity();
        try {
          readState();
          pw.println("String_Node_Str");
        }
  finally {
          Binder.restoreCallingIdentity(token);
        }
        return;
      }
 else       if (arg.length() > 0 && arg.charAt(0) == '-') {
        pw.println("String_Node_Str" + arg);
        return;
      }
 else {
        pw.println("String_Node_Str" + arg);
        return;
      }
    }
  }
synchronized (this) {
    pw.println("String_Node_Str");
    final long now=System.currentTimeMillis();
    boolean needSep=false;
    if (mOpModeWatchers.size() > 0) {
      needSep=true;
      pw.println("String_Node_Str");
      for (int i=0; i < mOpModeWatchers.size(); i++) {
        pw.print("String_Node_Str");
        pw.print(AppOpsManager.opToName(mOpModeWatchers.keyAt(i)));
        pw.println("String_Node_Str");
        ArrayList<Callback> callbacks=mOpModeWatchers.valueAt(i);
        for (int j=0; j < callbacks.size(); j++) {
          pw.print("String_Node_Str");
          pw.print(j);
          pw.print("String_Node_Str");
          pw.println(callbacks.get(j));
        }
      }
    }
    if (mPackageModeWatchers.size() > 0) {
      needSep=true;
      pw.println("String_Node_Str");
      for (int i=0; i < mPackageModeWatchers.size(); i++) {
        pw.print("String_Node_Str");
        pw.print(mPackageModeWatchers.keyAt(i));
        pw.println("String_Node_Str");
        ArrayList<Callback> callbacks=mPackageModeWatchers.valueAt(i);
        for (int j=0; j < callbacks.size(); j++) {
          pw.print("String_Node_Str");
          pw.print(j);
          pw.print("String_Node_Str");
          pw.println(callbacks.get(j));
        }
      }
    }
    if (mModeWatchers.size() > 0) {
      needSep=true;
      pw.println("String_Node_Str");
      for (int i=0; i < mModeWatchers.size(); i++) {
        pw.print("String_Node_Str");
        pw.print(mModeWatchers.keyAt(i));
        pw.print("String_Node_Str");
        pw.println(mModeWatchers.valueAt(i));
      }
    }
    if (mClients.size() > 0) {
      needSep=true;
      pw.println("String_Node_Str");
      for (int i=0; i < mClients.size(); i++) {
        pw.print("String_Node_Str");
        pw.print(mClients.keyAt(i));
        pw.println("String_Node_Str");
        ClientState cs=mClients.valueAt(i);
        pw.print("String_Node_Str");
        pw.println(cs);
        if (cs.mStartedOps != null && cs.mStartedOps.size() > 0) {
          pw.println("String_Node_Str");
          for (int j=0; j < cs.mStartedOps.size(); j++) {
            Op op=cs.mStartedOps.get(j);
            pw.print("String_Node_Str");
            pw.print("String_Node_Str");
            pw.print(op.uid);
            pw.print("String_Node_Str");
            pw.print(op.packageName);
            pw.print("String_Node_Str");
            pw.println(AppOpsManager.opToName(op.op));
          }
        }
      }
    }
    if (mAudioRestrictions.size() > 0) {
      boolean printedHeader=false;
      for (int o=0; o < mAudioRestrictions.size(); o++) {
        final String op=AppOpsManager.opToName(mAudioRestrictions.keyAt(o));
        final SparseArray<Restriction> restrictions=mAudioRestrictions.valueAt(o);
        for (int i=0; i < restrictions.size(); i++) {
          if (!printedHeader) {
            pw.println("String_Node_Str");
            printedHeader=true;
            needSep=true;
          }
          final int usage=restrictions.keyAt(i);
          pw.print("String_Node_Str");
          pw.print(op);
          pw.print("String_Node_Str");
          pw.print(AudioAttributes.usageToString(usage));
          Restriction r=restrictions.valueAt(i);
          pw.print("String_Node_Str");
          pw.println(r.mode);
          if (!r.exceptionPackages.isEmpty()) {
            pw.println("String_Node_Str");
            for (int j=0; j < r.exceptionPackages.size(); j++) {
              pw.print("String_Node_Str");
              pw.println(r.exceptionPackages.valueAt(j));
            }
          }
        }
      }
    }
    if (needSep) {
      pw.println();
    }
    for (int i=0; i < mUidStates.size(); i++) {
      UidState uidState=mUidStates.valueAt(i);
      pw.print("String_Node_Str");
      UserHandle.formatUid(pw,uidState.uid);
      pw.println("String_Node_Str");
      SparseIntArray opModes=uidState.opModes;
      if (opModes != null) {
        final int opModeCount=opModes.size();
        for (int j=0; j < opModeCount; j++) {
          final int code=opModes.keyAt(j);
          final int mode=opModes.valueAt(j);
          pw.print("String_Node_Str");
          pw.print(AppOpsManager.opToName(code));
          pw.print("String_Node_Str");
          pw.println(mode);
        }
      }
      ArrayMap<String,Ops> pkgOps=uidState.pkgOps;
      if (pkgOps == null) {
        continue;
      }
      for (      Ops ops : pkgOps.values()) {
        pw.print("String_Node_Str");
        pw.print(ops.packageName);
        pw.println("String_Node_Str");
        for (int j=0; j < ops.size(); j++) {
          Op op=ops.valueAt(j);
          pw.print("String_Node_Str");
          pw.print(AppOpsManager.opToName(op.op));
          pw.print("String_Node_Str");
          pw.print(op.mode);
          if (op.time != 0) {
            pw.print("String_Node_Str");
            TimeUtils.formatDuration(now - op.time,pw);
            pw.print("String_Node_Str");
          }
          if (op.rejectTime != 0) {
            pw.print("String_Node_Str");
            TimeUtils.formatDuration(now - op.rejectTime,pw);
            pw.print("String_Node_Str");
          }
          if (op.duration == -1) {
            pw.print("String_Node_Str");
          }
 else           if (op.duration != 0) {
            pw.print("String_Node_Str");
            TimeUtils.formatDuration(op.duration,pw);
          }
          pw.println();
        }
      }
    }
  }
}