{"record":{"id":"a7fa17cea82eea52","repo":"Blankj/AndroidUtilCode","slug":"invalid-shadow-size","errorCode":null,"errorMessage":"invalid shadow size","messagePattern":"invalid shadow size","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"lib/utilcode/src/main/java/com/blankj/utilcode/util/ShadowUtils.java","lineNumber":264,"sourceCode":"            mAddPaddingForCorners = addPaddingForCorners;\n            invalidateSelf();\n        }\n\n        @Override\n        public void setAlpha(int alpha) {\n            super.setAlpha(alpha);\n            mCornerShadowPaint.setAlpha(alpha);\n            mEdgeShadowPaint.setAlpha(alpha);\n        }\n\n        @Override\n        protected void onBoundsChange(Rect bounds) {\n            mDirty = true;\n        }\n\n        void setShadowSize(float shadowSize, float maxShadowSize) {\n            if (shadowSize < 0 || maxShadowSize < 0) {\n                throw new IllegalArgumentException(\"invalid shadow size\");\n            }\n            shadowSize = toEven(shadowSize);\n            maxShadowSize = toEven(maxShadowSize);\n            if (shadowSize > maxShadowSize) {\n                shadowSize = maxShadowSize;\n            }\n            if (mRawShadowSize == shadowSize && mRawMaxShadowSize == maxShadowSize) {\n                return;\n            }\n            mRawShadowSize = shadowSize;\n            mRawMaxShadowSize = maxShadowSize;\n            mShadowSize = Math.round(shadowSize * mShadowMultiplier);\n            mMaxShadowSize = maxShadowSize;\n            mDirty = true;\n            invalidateSelf();\n        }\n\n        @Override","sourceCodeStart":246,"sourceCodeEnd":282,"githubUrl":"https://github.com/Blankj/AndroidUtilCode/blob/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/lib/utilcode/src/main/java/com/blankj/utilcode/util/ShadowUtils.java#L246-L282","documentation":"ShadowUtils.setShadowSize validates that both shadowSize and maxShadowSize are non-negative, throwing IllegalArgumentException otherwise. Shadow sizes represent pixel dimensions of the shadow drawable, which cannot be negative. The guard rejects invalid input before it propagates into the paint/layout math (toEven rounding, shadow multiplier scaling).","triggerScenarios":"Calling setShadowSize with a negative float, or constructing a ShadowUtils drawable and invoking its internal setShadowSize(-1, x) / setShadowSize(x, -1). Also reachable via Config.setShadowSize if it forwards negative sizes downstream.","commonSituations":"Passing a resource dimension that resolved to a negative sentinel (-1 default); computing size from a delta that underflows to negative; porting code that used -1 as an 'unset' marker; reading size from a malformed config file.","solutions":["Clamp or validate the size to >= 0 before calling setShadowSize.","Replace negative sentinels (-1 meaning unset) with 0 or an explicit 'no shadow' branch.","Assert in debug builds that computed sizes are non-negative to catch the source early.","If the value comes from a dimension resource, verify resValues are positive at build time."],"exampleFix":"// before\nfloat size = requestedSize; // could be -1\nshadowUtils.setShadowSize(size, maxSize);\n\n// after\nfloat size = Math.max(0f, requestedSize);\nshadowUtils.setShadowSize(size, Math.max(size, maxSize));","handlingStrategy":"validation","validationCode":"if (shadowSize < 0 || maxShadowSize < 0) {\n  throw new IllegalArgumentException(\"shadow sizes must be >= 0\");\n}\nshadowUtils.setShadowSize(shadowSize, maxShadowSize);","typeGuard":null,"tryCatchPattern":"try {\n  shadowUtils.setShadowSize(size, max);\n} catch (IllegalArgumentException e) {\n  size = Math.max(0f, size);\n  max  = Math.max(0f, max);\n  shadowUtils.setShadowSize(size, max);\n}","preventionTips":["Clamp sizes to >= 0 before calling setShadowSize.","Replace -1 'unset' sentinels with 0 or explicit 'no shadow' branches.","Validate dimension resources are positive at build time.","Add debug asserts for computed sizes."],"tags":["android","shadow","validation","argument"],"backgroundTag":null,"analyzedSha":"7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809","analyzedAt":"2026-08-14T02:26:54.956Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}