Program: 23729
Project: 23729
Buggy source:
public static Intent getIntentOld(String uri) throws URISyntaxException {
  Intent intent;
  int i=uri.lastIndexOf('#');
  if (i >= 0) {
    Uri data=null;
    String action=null;
    if (i > 0) {
      data=Uri.parse(uri.substring(0,i));
    }
    i++;
    if (uri.regionMatches(i,"String_Node_Str",0,7)) {
      i+=7;
      int j=uri.indexOf(')',i);
      action=uri.substring(i,j);
      i=j + 1;
    }
    intent=new Intent(action,data);
    if (uri.regionMatches(i,"String_Node_Str",0,11)) {
      i+=11;
      int j=uri.indexOf(')',i);
      while (i < j) {
        int sep=uri.indexOf('!',i);
        if (sep < 0)         sep=j;
        if (i < sep) {
          intent.addCategory(uri.substring(i,sep));
        }
        i=sep + 1;
      }
      i=j + 1;
    }
    if (uri.regionMatches(i,"String_Node_Str",0,5)) {
      i+=5;
      int j=uri.indexOf(')',i);
      intent.mType=uri.substring(i,j);
      i=j + 1;
    }
    if (uri.regionMatches(i,"String_Node_Str",0,12)) {
      i+=12;
      int j=uri.indexOf(')',i);
      intent.mFlags=Integer.decode(uri.substring(i,j)).intValue();
      i=j + 1;
    }
    if (uri.regionMatches(i,"String_Node_Str",0,10)) {
      i+=10;
      int j=uri.indexOf(')',i);
      int sep=uri.indexOf('!',i);
      if (sep >= 0 && sep < j) {
        String pkg=uri.substring(i,sep);
        String cls=uri.substring(sep + 1,j);
        intent.mComponent=new ComponentName(pkg,cls);
      }
      i=j + 1;
    }
    if (uri.regionMatches(i,"String_Node_Str",0,7)) {
      i+=7;
      final int closeParen=uri.indexOf(')',i);
      if (closeParen == -1)       throw new URISyntaxException(uri,"String_Node_Str",i);
      while (i < closeParen) {
        int j=uri.indexOf('=',i);
        if (j <= i + 1 || i >= closeParen) {
          throw new URISyntaxException(uri,"String_Node_Str",i);
        }
        char type=uri.charAt(i);
        i++;
        String key=uri.substring(i,j);
        i=j + 1;
        j=uri.indexOf('!',i);
        if (j == -1 || j >= closeParen)         j=closeParen;
        if (i >= j)         throw new URISyntaxException(uri,"String_Node_Str",i);
        String value=uri.substring(i,j);
        i=j;
        if (intent.mExtras == null)         intent.mExtras=new Bundle();
        try {
switch (type) {
case 'S':
            intent.mExtras.putString(key,Uri.decode(value));
          break;
case 'B':
        intent.mExtras.putBoolean(key,Boolean.parseBoolean(value));
      break;
case 'b':
    intent.mExtras.putByte(key,Byte.parseByte(value));
  break;
case 'c':
intent.mExtras.putChar(key,Uri.decode(value).charAt(0));
break;
case 'd':
intent.mExtras.putDouble(key,Double.parseDouble(value));
break;
case 'f':
intent.mExtras.putFloat(key,Float.parseFloat(value));
break;
case 'i':
intent.mExtras.putInt(key,Integer.parseInt(value));
break;
case 'l':
intent.mExtras.putLong(key,Long.parseLong(value));
break;
case 's':
intent.mExtras.putShort(key,Short.parseShort(value));
break;
default :
throw new URISyntaxException(uri,"String_Node_Str",i);
}
}
 catch (NumberFormatException e) {
throw new URISyntaxException(uri,"String_Node_Str",i);
}
char ch=uri.charAt(i);
if (ch == ')') break;
if (ch != '!') throw new URISyntaxException(uri,"String_Node_Str",i);
i++;
}
}
if (intent.mAction == null) {
intent.mAction=ACTION_VIEW;
}
}
 else {
intent=new Intent(ACTION_VIEW,Uri.parse(uri));
}
return intent;
}

Fixed version (ground truth):
public static Intent getIntentOld(String uri) throws URISyntaxException {
  Intent intent;
  int i=uri.lastIndexOf('#');
  if (i >= 0) {
    String action=null;
    final int intentFragmentStart=i;
    boolean isIntentFragment=false;
    i++;
    if (uri.regionMatches(i,"String_Node_Str",0,7)) {
      isIntentFragment=true;
      i+=7;
      int j=uri.indexOf(')',i);
      action=uri.substring(i,j);
      i=j + 1;
    }
    intent=new Intent(action);
    if (uri.regionMatches(i,"String_Node_Str",0,11)) {
      isIntentFragment=true;
      i+=11;
      int j=uri.indexOf(')',i);
      while (i < j) {
        int sep=uri.indexOf('!',i);
        if (sep < 0)         sep=j;
        if (i < sep) {
          intent.addCategory(uri.substring(i,sep));
        }
        i=sep + 1;
      }
      i=j + 1;
    }
    if (uri.regionMatches(i,"String_Node_Str",0,5)) {
      isIntentFragment=true;
      i+=5;
      int j=uri.indexOf(')',i);
      intent.mType=uri.substring(i,j);
      i=j + 1;
    }
    if (uri.regionMatches(i,"String_Node_Str",0,12)) {
      isIntentFragment=true;
      i+=12;
      int j=uri.indexOf(')',i);
      intent.mFlags=Integer.decode(uri.substring(i,j)).intValue();
      i=j + 1;
    }
    if (uri.regionMatches(i,"String_Node_Str",0,10)) {
      isIntentFragment=true;
      i+=10;
      int j=uri.indexOf(')',i);
      int sep=uri.indexOf('!',i);
      if (sep >= 0 && sep < j) {
        String pkg=uri.substring(i,sep);
        String cls=uri.substring(sep + 1,j);
        intent.mComponent=new ComponentName(pkg,cls);
      }
      i=j + 1;
    }
    if (uri.regionMatches(i,"String_Node_Str",0,7)) {
      isIntentFragment=true;
      i+=7;
      final int closeParen=uri.indexOf(')',i);
      if (closeParen == -1)       throw new URISyntaxException(uri,"String_Node_Str",i);
      while (i < closeParen) {
        int j=uri.indexOf('=',i);
        if (j <= i + 1 || i >= closeParen) {
          throw new URISyntaxException(uri,"String_Node_Str",i);
        }
        char type=uri.charAt(i);
        i++;
        String key=uri.substring(i,j);
        i=j + 1;
        j=uri.indexOf('!',i);
        if (j == -1 || j >= closeParen)         j=closeParen;
        if (i >= j)         throw new URISyntaxException(uri,"String_Node_Str",i);
        String value=uri.substring(i,j);
        i=j;
        if (intent.mExtras == null)         intent.mExtras=new Bundle();
        try {
switch (type) {
case 'S':
            intent.mExtras.putString(key,Uri.decode(value));
          break;
case 'B':
        intent.mExtras.putBoolean(key,Boolean.parseBoolean(value));
      break;
case 'b':
    intent.mExtras.putByte(key,Byte.parseByte(value));
  break;
case 'c':
intent.mExtras.putChar(key,Uri.decode(value).charAt(0));
break;
case 'd':
intent.mExtras.putDouble(key,Double.parseDouble(value));
break;
case 'f':
intent.mExtras.putFloat(key,Float.parseFloat(value));
break;
case 'i':
intent.mExtras.putInt(key,Integer.parseInt(value));
break;
case 'l':
intent.mExtras.putLong(key,Long.parseLong(value));
break;
case 's':
intent.mExtras.putShort(key,Short.parseShort(value));
break;
default :
throw new URISyntaxException(uri,"String_Node_Str",i);
}
}
 catch (NumberFormatException e) {
throw new URISyntaxException(uri,"String_Node_Str",i);
}
char ch=uri.charAt(i);
if (ch == ')') break;
if (ch != '!') throw new URISyntaxException(uri,"String_Node_Str",i);
i++;
}
}
if (isIntentFragment) {
intent.mData=Uri.parse(uri.substring(0,intentFragmentStart));
}
 else {
intent.mData=Uri.parse(uri);
}
if (intent.mAction == null) {
intent.mAction=ACTION_VIEW;
}
}
 else {
intent=new Intent(ACTION_VIEW,Uri.parse(uri));
}
return intent;
}