microg/GmsCore · error · IllegalArgumentException

Missing package name

Error message

Missing package name

What it means

FacsCacheService.handleServiceRequest validates the caller: when the calling package name cannot be resolved, it throws with this message and refuses the service request. Generic package-name guard on the service entry point.

Source

Thrown at play-services-core/src/main/kotlin/org/microg/gms/udc/FacsCacheService.kt:29

import com.google.android.gms.common.api.Status
import com.google.android.gms.common.internal.GetServiceRequest
import com.google.android.gms.common.internal.IGmsCallbacks
import com.google.android.gms.facs.cache.FacsCacheCallOptions
import com.google.android.gms.facs.cache.GetActivityControlsSettingsResult
import com.google.android.gms.facs.cache.internal.IFacsCacheCallbacks
import com.google.android.gms.facs.cache.internal.IFacsCacheService
import org.microg.gms.BaseService
import org.microg.gms.common.GmsService
import org.microg.gms.common.PackageUtils
import org.microg.gms.utils.warnOnTransactionIssues

private const val TAG = "GmsFacsCache"

class FacsCacheService : BaseService(TAG, GmsService.FACS_CACHE) {
    override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest?, service: GmsService?) {
        Log.d(TAG, "handleServiceRequest request=${request} ")
        val packageName = PackageUtils.getAndCheckCallingPackage(this, request?.packageName)
            ?: throw IllegalArgumentException("Missing package name")
        callback.onPostInitComplete(0, FacsCacheServiceImpl(this, packageName).asBinder(), null)
    }
}

class FacsCacheServiceImpl(val context: Context, val packageName: String) : IFacsCacheService.Stub() {

    override fun forceSettingsCacheRefresh(callbacks: IFacsCacheCallbacks, options: FacsCacheCallOptions) {
        Log.d(TAG, "forceSettingsCacheRefresh")
        callbacks.onForceSettingsCacheRefreshResult(Status.CANCELED, null)
    }

    override fun updateActivityControlsSettings(callbacks: IFacsCacheCallbacks, bytes: ByteArray, options: FacsCacheCallOptions) {
        Log.d(TAG, "updateActivityControlsSettings")
        callbacks.onUpdateActivityControlsSettingsResult(Status.CANCELED, null)
    }

    override fun getActivityControlsSettings(callbacks: IFacsCacheCallbacks, options: FacsCacheCallOptions) {
        Log.d(TAG, "getActivityControlsSettings requestPackageName: $packageName, options: $options")

View on GitHub (pinned to 157c9d86ac)

Solutions

  1. Ensure the caller binds with a resolvable package identity
  2. Reject requests whose caller package is unavailable
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at play-services-core/src/main/kotlin/org/microg/gms/udc/FacsCacheService.kt:29 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of microg/GmsCore@157c9d86ac (2026-09-06). Data as JSON: /api/errors/74ddb921a6c286d4. Report an issue: GitHub.