Program: 197982
Project: 197982
Buggy source:
private Activity parseActivity(Package owner,Resources res,XmlPullParser parser,AttributeSet attrs,int flags,String[] outError,boolean receiver,boolean hardwareAccelerated) throws XmlPullParserException, IOException {
  TypedArray sa=res.obtainAttributes(attrs,com.android.internal.R.styleable.AndroidManifestActivity);
  if (mParseActivityArgs == null) {
    mParseActivityArgs=new ParseComponentArgs(owner,outError,com.android.internal.R.styleable.AndroidManifestActivity_name,com.android.internal.R.styleable.AndroidManifestActivity_label,com.android.internal.R.styleable.AndroidManifestActivity_icon,com.android.internal.R.styleable.AndroidManifestActivity_logo,com.android.internal.R.styleable.AndroidManifestActivity_banner,mSeparateProcesses,com.android.internal.R.styleable.AndroidManifestActivity_process,com.android.internal.R.styleable.AndroidManifestActivity_description,com.android.internal.R.styleable.AndroidManifestActivity_enabled);
  }
  mParseActivityArgs.tag=receiver ? "String_Node_Str" : "String_Node_Str";
  mParseActivityArgs.sa=sa;
  mParseActivityArgs.flags=flags;
  Activity a=new Activity(mParseActivityArgs,new ActivityInfo());
  if (outError[0] != null) {
    sa.recycle();
    return null;
  }
  boolean setExported=sa.hasValue(com.android.internal.R.styleable.AndroidManifestActivity_exported);
  if (setExported) {
    a.info.exported=sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_exported,false);
  }
  a.info.theme=sa.getResourceId(com.android.internal.R.styleable.AndroidManifestActivity_theme,0);
  a.info.uiOptions=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_uiOptions,a.info.applicationInfo.uiOptions);
  String parentName=sa.getNonConfigurationString(com.android.internal.R.styleable.AndroidManifestActivity_parentActivityName,Configuration.NATIVE_CONFIG_VERSION);
  if (parentName != null) {
    String parentClassName=buildClassName(a.info.packageName,parentName,outError);
    if (outError[0] == null) {
      a.info.parentActivityName=parentClassName;
    }
 else {
      Log.e(TAG,"String_Node_Str" + a.info.name + "String_Node_Str"+ parentName);
      outError[0]=null;
    }
  }
  String str;
  str=sa.getNonConfigurationString(com.android.internal.R.styleable.AndroidManifestActivity_permission,0);
  if (str == null) {
    a.info.permission=owner.applicationInfo.permission;
  }
 else {
    a.info.permission=str.length() > 0 ? str.toString().intern() : null;
  }
  str=sa.getNonConfigurationString(com.android.internal.R.styleable.AndroidManifestActivity_taskAffinity,Configuration.NATIVE_CONFIG_VERSION);
  a.info.taskAffinity=buildTaskAffinityName(owner.applicationInfo.packageName,owner.applicationInfo.taskAffinity,str,outError);
  a.info.flags=0;
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_multiprocess,false)) {
    a.info.flags|=ActivityInfo.FLAG_MULTIPROCESS;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_finishOnTaskLaunch,false)) {
    a.info.flags|=ActivityInfo.FLAG_FINISH_ON_TASK_LAUNCH;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_clearTaskOnLaunch,false)) {
    a.info.flags|=ActivityInfo.FLAG_CLEAR_TASK_ON_LAUNCH;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_noHistory,false)) {
    a.info.flags|=ActivityInfo.FLAG_NO_HISTORY;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_alwaysRetainTaskState,false)) {
    a.info.flags|=ActivityInfo.FLAG_ALWAYS_RETAIN_TASK_STATE;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_stateNotNeeded,false)) {
    a.info.flags|=ActivityInfo.FLAG_STATE_NOT_NEEDED;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_excludeFromRecents,false)) {
    a.info.flags|=ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_allowTaskReparenting,(owner.applicationInfo.flags & ApplicationInfo.FLAG_ALLOW_TASK_REPARENTING) != 0)) {
    a.info.flags|=ActivityInfo.FLAG_ALLOW_TASK_REPARENTING;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_finishOnCloseSystemDialogs,false)) {
    a.info.flags|=ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_showOnLockScreen,false)) {
    a.info.flags|=ActivityInfo.FLAG_SHOW_ON_LOCK_SCREEN;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_immersive,false)) {
    a.info.flags|=ActivityInfo.FLAG_IMMERSIVE;
  }
  if (!receiver) {
    if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_hardwareAccelerated,hardwareAccelerated)) {
      a.info.flags|=ActivityInfo.FLAG_HARDWARE_ACCELERATED;
    }
    a.info.launchMode=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_launchMode,ActivityInfo.LAUNCH_MULTIPLE);
    a.info.documentLaunchMode=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_documentLaunchMode,ActivityInfo.DOCUMENT_LAUNCH_NONE);
    a.info.maxRecents=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_maxRecents,15);
    a.info.screenOrientation=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_screenOrientation,ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
    a.info.configChanges=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_configChanges,0);
    a.info.softInputMode=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_windowSoftInputMode,0);
    a.info.persistableMode=sa.getInteger(com.android.internal.R.styleable.AndroidManifestActivity_persistableMode,ActivityInfo.PERSIST_ROOT_ONLY);
    if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_allowEmbedded,false)) {
      a.info.flags|=ActivityInfo.FLAG_ALLOW_EMBEDDED;
    }
    if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_autoRemoveFromRecents,false)) {
      a.info.flags|=ActivityInfo.FLAG_AUTO_REMOVE_FROM_RECENTS;
    }
    if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_relinquishTaskIdentity,false)) {
      a.info.flags|=ActivityInfo.FLAG_RELINQUISH_TASK_IDENTITY;
    }
  }
 else {
    a.info.launchMode=ActivityInfo.LAUNCH_MULTIPLE;
    a.info.configChanges=0;
  }
  if (receiver) {
    if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_singleUser,false)) {
      a.info.flags|=ActivityInfo.FLAG_SINGLE_USER;
      if (a.info.exported && (flags & PARSE_IS_PRIVILEGED) == 0) {
        Slog.w(TAG,"String_Node_Str" + a.className + "String_Node_Str"+ mArchiveSourcePath+ "String_Node_Str"+ parser.getPositionDescription());
        a.info.exported=false;
        setExported=true;
      }
    }
    if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_primaryUserOnly,false)) {
      a.info.flags|=ActivityInfo.FLAG_PRIMARY_USER_ONLY;
    }
  }
  sa.recycle();
  if (receiver && (owner.applicationInfo.flags & ApplicationInfo.FLAG_CANT_SAVE_STATE) != 0) {
    if (a.info.processName == owner.packageName) {
      outError[0]="String_Node_Str";
    }
  }
  if (outError[0] != null) {
    return null;
  }
  int outerDepth=parser.getDepth();
  int type;
  while ((type=parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
    if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
      continue;
    }
    if (parser.getName().equals("String_Node_Str")) {
      ActivityIntentInfo intent=new ActivityIntentInfo(a);
      if (!parseIntent(res,parser,attrs,true,intent,outError)) {
        return null;
      }
      if (intent.countActions() == 0) {
        Slog.w(TAG,"String_Node_Str" + mArchiveSourcePath + "String_Node_Str"+ parser.getPositionDescription());
      }
 else {
        a.intents.add(intent);
      }
    }
 else     if (!receiver && parser.getName().equals("String_Node_Str")) {
      ActivityIntentInfo intent=new ActivityIntentInfo(a);
      if (!parseIntent(res,parser,attrs,false,intent,outError)) {
        return null;
      }
      if (intent.countActions() == 0) {
        Slog.w(TAG,"String_Node_Str" + mArchiveSourcePath + "String_Node_Str"+ parser.getPositionDescription());
      }
 else {
        if (owner.preferredActivityFilters == null) {
          owner.preferredActivityFilters=new ArrayList<ActivityIntentInfo>();
        }
        owner.preferredActivityFilters.add(intent);
      }
    }
 else     if (parser.getName().equals("String_Node_Str")) {
      if ((a.metaData=parseMetaData(res,parser,attrs,a.metaData,outError)) == null) {
        return null;
      }
    }
 else {
      if (!RIGID_PARSER) {
        Slog.w(TAG,"String_Node_Str" + mArchiveSourcePath + "String_Node_Str");
        if (receiver) {
          Slog.w(TAG,"String_Node_Str" + parser.getName() + "String_Node_Str"+ mArchiveSourcePath+ "String_Node_Str"+ parser.getPositionDescription());
        }
 else {
          Slog.w(TAG,"String_Node_Str" + parser.getName() + "String_Node_Str"+ mArchiveSourcePath+ "String_Node_Str"+ parser.getPositionDescription());
        }
        XmlUtils.skipCurrentTag(parser);
        continue;
      }
 else {
        if (receiver) {
          outError[0]="String_Node_Str" + parser.getName();
        }
 else {
          outError[0]="String_Node_Str" + parser.getName();
        }
        return null;
      }
    }
  }
  if (!setExported) {
    a.info.exported=a.intents.size() > 0;
  }
  return a;
}

Fixed version (ground truth):
private Activity parseActivity(Package owner,Resources res,XmlPullParser parser,AttributeSet attrs,int flags,String[] outError,boolean receiver,boolean hardwareAccelerated) throws XmlPullParserException, IOException {
  TypedArray sa=res.obtainAttributes(attrs,com.android.internal.R.styleable.AndroidManifestActivity);
  if (mParseActivityArgs == null) {
    mParseActivityArgs=new ParseComponentArgs(owner,outError,com.android.internal.R.styleable.AndroidManifestActivity_name,com.android.internal.R.styleable.AndroidManifestActivity_label,com.android.internal.R.styleable.AndroidManifestActivity_icon,com.android.internal.R.styleable.AndroidManifestActivity_logo,com.android.internal.R.styleable.AndroidManifestActivity_banner,mSeparateProcesses,com.android.internal.R.styleable.AndroidManifestActivity_process,com.android.internal.R.styleable.AndroidManifestActivity_description,com.android.internal.R.styleable.AndroidManifestActivity_enabled);
  }
  mParseActivityArgs.tag=receiver ? "String_Node_Str" : "String_Node_Str";
  mParseActivityArgs.sa=sa;
  mParseActivityArgs.flags=flags;
  Activity a=new Activity(mParseActivityArgs,new ActivityInfo());
  if (outError[0] != null) {
    sa.recycle();
    return null;
  }
  boolean setExported=sa.hasValue(com.android.internal.R.styleable.AndroidManifestActivity_exported);
  if (setExported) {
    a.info.exported=sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_exported,false);
  }
  a.info.theme=sa.getResourceId(com.android.internal.R.styleable.AndroidManifestActivity_theme,0);
  a.info.uiOptions=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_uiOptions,a.info.applicationInfo.uiOptions);
  String parentName=sa.getNonConfigurationString(com.android.internal.R.styleable.AndroidManifestActivity_parentActivityName,Configuration.NATIVE_CONFIG_VERSION);
  if (parentName != null) {
    String parentClassName=buildClassName(a.info.packageName,parentName,outError);
    if (outError[0] == null) {
      a.info.parentActivityName=parentClassName;
    }
 else {
      Log.e(TAG,"String_Node_Str" + a.info.name + "String_Node_Str"+ parentName);
      outError[0]=null;
    }
  }
  String str;
  str=sa.getNonConfigurationString(com.android.internal.R.styleable.AndroidManifestActivity_permission,0);
  if (str == null) {
    a.info.permission=owner.applicationInfo.permission;
  }
 else {
    a.info.permission=str.length() > 0 ? str.toString().intern() : null;
  }
  str=sa.getNonConfigurationString(com.android.internal.R.styleable.AndroidManifestActivity_taskAffinity,Configuration.NATIVE_CONFIG_VERSION);
  a.info.taskAffinity=buildTaskAffinityName(owner.applicationInfo.packageName,owner.applicationInfo.taskAffinity,str,outError);
  a.info.flags=0;
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_multiprocess,false)) {
    a.info.flags|=ActivityInfo.FLAG_MULTIPROCESS;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_finishOnTaskLaunch,false)) {
    a.info.flags|=ActivityInfo.FLAG_FINISH_ON_TASK_LAUNCH;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_clearTaskOnLaunch,false)) {
    a.info.flags|=ActivityInfo.FLAG_CLEAR_TASK_ON_LAUNCH;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_noHistory,false)) {
    a.info.flags|=ActivityInfo.FLAG_NO_HISTORY;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_alwaysRetainTaskState,false)) {
    a.info.flags|=ActivityInfo.FLAG_ALWAYS_RETAIN_TASK_STATE;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_stateNotNeeded,false)) {
    a.info.flags|=ActivityInfo.FLAG_STATE_NOT_NEEDED;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_excludeFromRecents,false)) {
    a.info.flags|=ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_allowTaskReparenting,(owner.applicationInfo.flags & ApplicationInfo.FLAG_ALLOW_TASK_REPARENTING) != 0)) {
    a.info.flags|=ActivityInfo.FLAG_ALLOW_TASK_REPARENTING;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_finishOnCloseSystemDialogs,false)) {
    a.info.flags|=ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_showOnLockScreen,false)) {
    a.info.flags|=ActivityInfo.FLAG_SHOW_ON_LOCK_SCREEN;
  }
  if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_immersive,false)) {
    a.info.flags|=ActivityInfo.FLAG_IMMERSIVE;
  }
  if (!receiver) {
    if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_hardwareAccelerated,hardwareAccelerated)) {
      a.info.flags|=ActivityInfo.FLAG_HARDWARE_ACCELERATED;
    }
    a.info.launchMode=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_launchMode,ActivityInfo.LAUNCH_MULTIPLE);
    a.info.documentLaunchMode=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_documentLaunchMode,ActivityInfo.DOCUMENT_LAUNCH_NONE);
    a.info.maxRecents=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_maxRecents,ActivityManager.getDefaultAppRecentsLimitStatic());
    a.info.screenOrientation=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_screenOrientation,ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
    a.info.configChanges=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_configChanges,0);
    a.info.softInputMode=sa.getInt(com.android.internal.R.styleable.AndroidManifestActivity_windowSoftInputMode,0);
    a.info.persistableMode=sa.getInteger(com.android.internal.R.styleable.AndroidManifestActivity_persistableMode,ActivityInfo.PERSIST_ROOT_ONLY);
    if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_allowEmbedded,false)) {
      a.info.flags|=ActivityInfo.FLAG_ALLOW_EMBEDDED;
    }
    if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_autoRemoveFromRecents,false)) {
      a.info.flags|=ActivityInfo.FLAG_AUTO_REMOVE_FROM_RECENTS;
    }
    if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_relinquishTaskIdentity,false)) {
      a.info.flags|=ActivityInfo.FLAG_RELINQUISH_TASK_IDENTITY;
    }
  }
 else {
    a.info.launchMode=ActivityInfo.LAUNCH_MULTIPLE;
    a.info.configChanges=0;
  }
  if (receiver) {
    if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_singleUser,false)) {
      a.info.flags|=ActivityInfo.FLAG_SINGLE_USER;
      if (a.info.exported && (flags & PARSE_IS_PRIVILEGED) == 0) {
        Slog.w(TAG,"String_Node_Str" + a.className + "String_Node_Str"+ mArchiveSourcePath+ "String_Node_Str"+ parser.getPositionDescription());
        a.info.exported=false;
        setExported=true;
      }
    }
    if (sa.getBoolean(com.android.internal.R.styleable.AndroidManifestActivity_primaryUserOnly,false)) {
      a.info.flags|=ActivityInfo.FLAG_PRIMARY_USER_ONLY;
    }
  }
  sa.recycle();
  if (receiver && (owner.applicationInfo.flags & ApplicationInfo.FLAG_CANT_SAVE_STATE) != 0) {
    if (a.info.processName == owner.packageName) {
      outError[0]="String_Node_Str";
    }
  }
  if (outError[0] != null) {
    return null;
  }
  int outerDepth=parser.getDepth();
  int type;
  while ((type=parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
    if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
      continue;
    }
    if (parser.getName().equals("String_Node_Str")) {
      ActivityIntentInfo intent=new ActivityIntentInfo(a);
      if (!parseIntent(res,parser,attrs,true,intent,outError)) {
        return null;
      }
      if (intent.countActions() == 0) {
        Slog.w(TAG,"String_Node_Str" + mArchiveSourcePath + "String_Node_Str"+ parser.getPositionDescription());
      }
 else {
        a.intents.add(intent);
      }
    }
 else     if (!receiver && parser.getName().equals("String_Node_Str")) {
      ActivityIntentInfo intent=new ActivityIntentInfo(a);
      if (!parseIntent(res,parser,attrs,false,intent,outError)) {
        return null;
      }
      if (intent.countActions() == 0) {
        Slog.w(TAG,"String_Node_Str" + mArchiveSourcePath + "String_Node_Str"+ parser.getPositionDescription());
      }
 else {
        if (owner.preferredActivityFilters == null) {
          owner.preferredActivityFilters=new ArrayList<ActivityIntentInfo>();
        }
        owner.preferredActivityFilters.add(intent);
      }
    }
 else     if (parser.getName().equals("String_Node_Str")) {
      if ((a.metaData=parseMetaData(res,parser,attrs,a.metaData,outError)) == null) {
        return null;
      }
    }
 else {
      if (!RIGID_PARSER) {
        Slog.w(TAG,"String_Node_Str" + mArchiveSourcePath + "String_Node_Str");
        if (receiver) {
          Slog.w(TAG,"String_Node_Str" + parser.getName() + "String_Node_Str"+ mArchiveSourcePath+ "String_Node_Str"+ parser.getPositionDescription());
        }
 else {
          Slog.w(TAG,"String_Node_Str" + parser.getName() + "String_Node_Str"+ mArchiveSourcePath+ "String_Node_Str"+ parser.getPositionDescription());
        }
        XmlUtils.skipCurrentTag(parser);
        continue;
      }
 else {
        if (receiver) {
          outError[0]="String_Node_Str" + parser.getName();
        }
 else {
          outError[0]="String_Node_Str" + parser.getName();
        }
        return null;
      }
    }
  }
  if (!setExported) {
    a.info.exported=a.intents.size() > 0;
  }
  return a;
}