{"record":{"id":"17c1f0a97fc55ae5","repo":"microg/GmsCore","slug":"required-account-information-missing","errorCode":null,"errorMessage":"Required account information missing","messagePattern":"Required account information missing","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"play-services-core/src/main/java/org/microg/gms/auth/AskPermissionActivity.java","lineNumber":105,"sourceCode":"                service = intent.getStringExtra(KEY_AUTHTOKEN);\n                callerUid = intent.getIntExtra(KEY_CALLER_UID, 0);\n                callerPid = intent.getIntExtra(KEY_CALLER_PID, 0);\n                fromAccountManager = intent.hasExtra(EXTRA_FROM_ACCOUNT_MANAGER);\n                if (intent.hasExtra(EXTRA_CONSENT_DATA)) {\n                    try {\n                        consentData = ConsentData.ADAPTER.decode(intent.getByteArrayExtra(EXTRA_CONSENT_DATA));\n                    } catch (Exception e) {\n                        Log.w(TAG, \"ConsentData decode failed\", e);\n                    }\n                }\n            }\n            if (accountName != null && accountType != null) {\n                account = new Account(accountName, accountType);\n            }\n        }\n\n        private void verify(Context context) throws Exception {\n            if (accountName == null || accountType == null || account == null) throw new IllegalArgumentException(\"Required account information missing\");\n            if (packageName == null || service == null) throw new IllegalArgumentException(\"Required request information missing\");\n            if (callerUid == 0) throw new IllegalArgumentException(\"Required caller information missing\");\n            PackageUtils.getAndCheckPackage(context, packageName, callerUid, callerPid);\n\n            PackageManager packageManager = context.getPackageManager();\n            ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, 0);\n            appLabel = packageManager.getApplicationLabel(applicationInfo);\n            appIcon = packageManager.getApplicationIcon(applicationInfo);\n        }\n    }\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.ask_permission);\n        data = new IntentData(getIntent());\n        try {\n            data.verify(this);","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/microg/GmsCore/blob/157c9d86ac46c195a86c2f15ab55c84036223f95/play-services-core/src/main/java/org/microg/gms/auth/AskPermissionActivity.java#L87-L123","documentation":"AskPermissionActivity's verify() validates the intent extras before showing the consent UI. If accountName, accountType, or the derived Account is null, it throws IllegalArgumentException because the permission request cannot proceed without a target account.","triggerScenarios":"Starting AskPermissionActivity with an intent missing the account name and/or account type extras, so Account fields are never populated.","commonSituations":"Constructing the auth intent manually without all required extras; a caller passing null account because AccountManager returned an unknown account; refactored code dropping extras.","solutions":["Populate both the account name and account type extras in the launching intent before startActivity.","Verify the Account exists via AccountManager.get(context).getAccountByName-equivalent before launching.","Null-check extras in the calling code and fail early with a clear error.","Use the library's intent-builder helpers if available so all required extras are set."],"exampleFix":"// before\nIntent i = new Intent(context, AskPermissionActivity.class); // no account extras\nstartActivity(i);\n// after\nIntent i = new Intent(context, AskPermissionActivity.class);\ni.putExtra(KEY_ACCOUNT_NAME, account.name);\ni.putExtra(KEY_ACCOUNT_TYPE, account.type);\nstartActivity(i);","handlingStrategy":"validation","validationCode":"if (account == null || account.name == null || account.type == null) throw new IllegalArgumentException(\"account extras required before launching AskPermissionActivity\");","typeGuard":"if (intent.getStringExtra(KEY_ACCOUNT_NAME) == null || intent.getStringExtra(KEY_ACCOUNT_TYPE) == null) return false;","tryCatchPattern":"try { verify(context); } catch (IllegalArgumentException e) { finish(); // show 'missing account' error to caller }","preventionTips":["Set account name and type extras on every intent","Validate extras before startActivity","Check the account exists in AccountManager first"],"tags":["android","auth","intent-extras","illegal-argument"],"backgroundTag":"missing-required-argument","analyzedSha":"157c9d86ac46c195a86c2f15ab55c84036223f95","analyzedAt":"2026-09-06T17:27:33.892Z","contentChangedAt":"2026-09-06T17:27:33.892Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}