{"record":{"id":"c943e44c908d0e67","repo":"microg/GmsCore","slug":"invalid-radius","errorCode":null,"errorMessage":"invalid radius: ","messagePattern":"invalid radius: ","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"play-services-location/core/system-api/src/main/java/android/location/Geofence.java","lineNumber":72,"sourceCode":"\n    /** @hide */\n    public double getLatitude() {\n        return mLatitude;\n    }\n\n    /** @hide */\n    public double getLongitude() {\n        return mLongitude;\n    }\n\n    /** @hide */\n    public float getRadius() {\n        return mRadius;\n    }\n\n    private static void checkRadius(float radius) {\n        if (radius <= 0) {\n            throw new IllegalArgumentException(\"invalid radius: \" + radius);\n        }\n    }\n\n    private static void checkLatLong(double latitude, double longitude) {\n        if (latitude > 90.0 || latitude < -90.0) {\n            throw new IllegalArgumentException(\"invalid latitude: \" + latitude);\n        }\n        if (longitude > 180.0 || longitude < -180.0) {\n            throw new IllegalArgumentException(\"invalid longitude: \" + longitude);\n        }\n    }\n\n    private static void checkType(int type) {\n        if (type != TYPE_HORIZONTAL_CIRCLE) {\n            throw new IllegalArgumentException(\"invalid type: \" + type);\n        }\n    }\n","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/microg/GmsCore/blob/157c9d86ac46c195a86c2f15ab55c84036223f95/play-services-location/core/system-api/src/main/java/android/location/Geofence.java#L54-L90","documentation":"android.location.Geofence's builder throws IllegalArgumentException(\"invalid radius: \" + radius) when checkRadius receives a radius <= 0. Geofences are defined as horizontal circles, so a positive finite radius in meters is mandatory.","triggerScenarios":"Calling Geofence.Builder.setRadius(0f), a negative value, or NaN/Infinity-tainted values when constructing a geofence via the builder before create().","commonSituations":"Uninitialized or default-zero float fields feeding setRadius; parsing radius from user input or remote config without validation; unit confusion (feet vs meters) producing wrong magnitudes; division producing NaN.","solutions":["Ensure the radius is > 0 before calling setRadius — reject or clamp invalid values at the config/UI layer","Validate parsed/user input: require a finite, positive number in meters (typically >= 20m for reliability)","Check the data source for unit conversion or uninitialized-variable bugs"],"exampleFix":"// before\nGeofence geofence = new Geofence.Builder()\n    .setRequestId(id)\n    .setRadius(radiusFromConfig)\n    .build();\n// after\nif (!(radiusFromConfig > 0f) || Float.isNaN(radiusFromConfig)) {\n    throw new IllegalArgumentException(\"geofence radius must be positive meters\");\n}\nGeofence geofence = new Geofence.Builder()\n    .setRequestId(id)\n    .setRadius(radiusFromConfig)\n    .build();","handlingStrategy":"validation","validationCode":"public static boolean isValidGeofenceRadius(float radius) {\n    return Float.isFinite(radius) && radius > 0f;\n}","typeGuard":null,"tryCatchPattern":"try {\n    Geofence g = new Geofence.Builder()\n        .setRequestId(id).setCircularRegion(lat, lon, radius).build();\n} catch (IllegalArgumentException e) {\n    if (e.getMessage() != null && e.getMessage().startsWith(\"invalid radius\")) {\n        reportBadConfig(id, radius);\n    }\n}","preventionTips":["Validate radius at the config/UI layer before building geofences","Enforce sensible minimums (>= 20m) for reliable geofence triggers","Beware unit conversions (feet vs meters) and uninitialized floats"],"tags":["android","geofencing","validation","location"],"backgroundTag":"invalid-argument-value","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"}