Program: 23666
Project: 23666
Buggy source:
private Bundle parseMetaData(Resources res,XmlPullParser parser,AttributeSet attrs,Bundle data,String[] outError) throws XmlPullParserException, IOException {
  TypedArray sa=res.obtainAttributes(attrs,com.android.internal.R.styleable.AndroidManifestMetaData);
  if (data == null) {
    data=new Bundle();
  }
  String name=sa.getNonResourceString(com.android.internal.R.styleable.AndroidManifestMetaData_name);
  if (name == null) {
    outError[0]="String_Node_Str";
    sa.recycle();
    return null;
  }
  name=name.intern();
  TypedValue v=sa.peekValue(com.android.internal.R.styleable.AndroidManifestMetaData_resource);
  if (v != null && v.resourceId != 0) {
    data.putInt(name,v.resourceId);
  }
 else {
    v=sa.peekValue(com.android.internal.R.styleable.AndroidManifestMetaData_value);
    if (v != null) {
      if (v.type == TypedValue.TYPE_STRING) {
        CharSequence cs=v.coerceToString();
        data.putString(name,cs != null ? cs.toString().intern() : null);
      }
 else       if (v.type == TypedValue.TYPE_INT_BOOLEAN) {
        data.putBoolean(name,v.data != 0);
      }
 else       if (v.type >= TypedValue.TYPE_FIRST_INT && v.type <= TypedValue.TYPE_LAST_INT) {
        data.putInt(name,v.data);
      }
 else       if (v.type == TypedValue.TYPE_FLOAT) {
        data.putFloat(name,v.getFloat());
      }
 else {
        if (!RIGID_PARSER) {
          Log.w(TAG,"String_Node_Str" + mArchiveSourcePath + "String_Node_Str");
          Log.w(TAG,"String_Node_Str");
        }
 else {
          outError[0]="String_Node_Str";
          data=null;
        }
      }
    }
 else {
      outError[0]="String_Node_Str";
      data=null;
    }
  }
  sa.recycle();
  XmlUtils.skipCurrentTag(parser);
  return data;
}

Fixed version (ground truth):
private Bundle parseMetaData(Resources res,XmlPullParser parser,AttributeSet attrs,Bundle data,String[] outError) throws XmlPullParserException, IOException {
  TypedArray sa=res.obtainAttributes(attrs,com.android.internal.R.styleable.AndroidManifestMetaData);
  if (data == null) {
    data=new Bundle();
  }
  String name=sa.getNonResourceString(com.android.internal.R.styleable.AndroidManifestMetaData_name);
  if (name == null) {
    outError[0]="String_Node_Str";
    sa.recycle();
    return null;
  }
  name=name.intern();
  TypedValue v=sa.peekValue(com.android.internal.R.styleable.AndroidManifestMetaData_resource);
  if (v != null && v.resourceId != 0) {
    data.putInt(name,v.resourceId);
  }
 else {
    v=sa.peekValue(com.android.internal.R.styleable.AndroidManifestMetaData_value);
    if (v != null) {
      if (v.type == TypedValue.TYPE_STRING) {
        CharSequence cs=v.coerceToString();
        data.putString(name,cs != null ? cs.toString().intern() : null);
      }
 else       if (v.type == TypedValue.TYPE_INT_BOOLEAN) {
        data.putBoolean(name,v.data != 0);
      }
 else       if (v.type >= TypedValue.TYPE_FIRST_INT && v.type <= TypedValue.TYPE_LAST_INT) {
        data.putInt(name,v.data);
      }
 else       if (v.type == TypedValue.TYPE_FLOAT) {
        data.putFloat(name,v.getFloat());
      }
 else {
        if (!RIGID_PARSER) {
          Log.w(TAG,"String_Node_Str" + parser.getName() + "String_Node_Str"+ mArchiveSourcePath+ "String_Node_Str"+ parser.getPositionDescription());
        }
 else {
          outError[0]="String_Node_Str";
          data=null;
        }
      }
    }
 else {
      outError[0]="String_Node_Str";
      data=null;
    }
  }
  sa.recycle();
  XmlUtils.skipCurrentTag(parser);
  return data;
}