Program: 9016
Project: 9016
Buggy source:
@Override public synchronized String commit(String rootPath,String json,String baseRevId,String message) throws MicroKernelException {
  Revision baseRev;
  if (baseRevId == null) {
    baseRev=headRevision;
    baseRevId=baseRev.toString();
  }
 else {
    baseRev=Revision.fromString(stripBranchRevMarker(baseRevId));
  }
  JsopReader t=new JsopTokenizer(json);
  Revision rev=newRevision();
  Commit commit=new Commit(this,baseRev,rev);
  while (true) {
    int r=t.read();
    if (r == JsopReader.END) {
      break;
    }
    String path=PathUtils.concat(rootPath,t.readString());
switch (r) {
case '+':
      t.read(':');
    t.read('{');
  parseAddNode(commit,t,path);
break;
case '-':
commit.removeNode(path);
markAsDeleted(path,commit,true);
commit.removeNodeDiff(path);
break;
case '^':
t.read(':');
String value;
if (t.matches(JsopReader.NULL)) {
value=null;
commit.getDiff().tag('^').key(path).value(null);
}
 else {
value=t.readRawValue().trim();
commit.getDiff().tag('^').key(path).value(value);
}
String p=PathUtils.getParentPath(path);
String propertyName=PathUtils.getName(path);
commit.updateProperty(p,propertyName,value);
commit.updatePropertyDiff(p,propertyName,value);
break;
case '>':
{
t.read(':');
String sourcePath=path;
String targetPath=t.readString();
if (!PathUtils.isAbsolute(targetPath)) {
targetPath=PathUtils.concat(rootPath,targetPath);
}
commit.moveNode(sourcePath,targetPath);
moveNode(sourcePath,targetPath,baseRev,commit);
break;
}
case '*':
{
t.read(':');
String sourcePath=path;
String targetPath=t.readString();
if (!PathUtils.isAbsolute(targetPath)) {
targetPath=PathUtils.concat(rootPath,targetPath);
}
commit.copyNode(sourcePath,targetPath);
copyNode(sourcePath,targetPath,baseRev,commit);
break;
}
default :
throw new MicroKernelException("String_Node_Str" + (char)t.getTokenType());
}
}
if (baseRevId.startsWith("String_Node_Str")) {
branchCommits.put(rev,baseRev);
boolean success=false;
try {
commit.prepare(baseRev);
success=true;
}
  finally {
if (!success) {
branchCommits.remove(rev);
}
}
return "String_Node_Str" + rev.toString();
}
commit.apply();
headRevision=commit.getRevision();
return rev.toString();
}

Fixed version (ground truth):
@Override public synchronized String commit(String rootPath,String json,String baseRevId,String message) throws MicroKernelException {
  Revision baseRev;
  if (baseRevId == null) {
    baseRev=headRevision;
    baseRevId=baseRev.toString();
  }
 else {
    baseRev=Revision.fromString(stripBranchRevMarker(baseRevId));
  }
  JsopReader t=new JsopTokenizer(json);
  Revision rev=newRevision();
  Commit commit=new Commit(this,baseRev,rev);
  while (true) {
    int r=t.read();
    if (r == JsopReader.END) {
      break;
    }
    String path=PathUtils.concat(rootPath,t.readString());
switch (r) {
case '+':
      t.read(':');
    t.read('{');
  parseAddNode(commit,t,path);
break;
case '-':
commit.removeNode(path);
markAsDeleted(path,commit,true);
commit.removeNodeDiff(path);
break;
case '^':
t.read(':');
String value;
if (t.matches(JsopReader.NULL)) {
value=null;
commit.getDiff().tag('^').key(path).value(null);
}
 else {
value=t.readRawValue().trim();
commit.getDiff().tag('^').key(path).value(value);
}
String p=PathUtils.getParentPath(path);
String propertyName=PathUtils.getName(path);
commit.updateProperty(p,propertyName,value);
commit.updatePropertyDiff(p,propertyName,value);
break;
case '>':
{
t.read(':');
String sourcePath=path;
String targetPath=t.readString();
if (!PathUtils.isAbsolute(targetPath)) {
targetPath=PathUtils.concat(rootPath,targetPath);
}
if (!nodeExists(sourcePath,baseRevId)) {
throw new MicroKernelException("String_Node_Str" + sourcePath + "String_Node_Str"+ baseRevId);
}
if (nodeExists(targetPath,baseRevId)) {
throw new MicroKernelException("String_Node_Str" + targetPath + "String_Node_Str"+ baseRevId);
}
commit.moveNode(sourcePath,targetPath);
moveNode(sourcePath,targetPath,baseRev,commit);
break;
}
case '*':
{
t.read(':');
String sourcePath=path;
String targetPath=t.readString();
if (!PathUtils.isAbsolute(targetPath)) {
targetPath=PathUtils.concat(rootPath,targetPath);
}
if (!nodeExists(sourcePath,baseRevId)) {
throw new MicroKernelException("String_Node_Str" + sourcePath + "String_Node_Str"+ baseRevId);
}
commit.copyNode(sourcePath,targetPath);
copyNode(sourcePath,targetPath,baseRev,commit);
break;
}
default :
throw new MicroKernelException("String_Node_Str" + (char)t.getTokenType());
}
}
if (baseRevId.startsWith("String_Node_Str")) {
branchCommits.put(rev,baseRev);
boolean success=false;
try {
commit.prepare(baseRev);
success=true;
}
  finally {
if (!success) {
branchCommits.remove(rev);
}
}
return "String_Node_Str" + rev.toString();
}
commit.apply();
headRevision=commit.getRevision();
return rev.toString();
}