Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Potential NPE: missing non-null contract for Context in BaseFilterRender.initGl

Open
#2,207 0 comments 1 reaction 0 assignees View on GitHub

Maintainers usually reply within 2 days

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
android, java, kotlin
Domain
mobile-dev

Research direction

Read the cited CropFilterRender.kt, BaseFilterRender.java, and GlUtil.java code, then trace the BaseFilterRender.initGl call sites to determine whether null can reach the filter. Confirm the intended Context contract and, if needed, add a regression test for the initialization path; done means the contract is explicit and the behavior is covered.

Written by the indexing model from the issue text.

Description

Describe the bug

During a source-level review, I found a potential Kotlin–Java nullability issue in CropFilterRender.

CropFilterRender.initGlFilter declares its parameter as nullable (Context?) and passes it directly to the Java method GlUtil.getStringFromRaw(Context context). That Java method immediately calls context.getResources() without checking for null.

Relevant code:

CropFilterRender.kt#L65-L67
BaseFilterRender.java#L46-L66
GlUtil.java#L100-L104

If a null value reaches this call path, context.getResources() can throw a NullPointerException.

I have not reproduced this exception in an Android instrumentation test yet. The normal rendering path appears to initialize MainRender with a non-null Context, so I would appreciate confirmation of the intended nullability contract.

To Reproduce

This report was prepared against RootEncoder commit ebb9b4b0cc5c54d58efbd18a760ca5b7e50d3fc7.

  1. Inspect CropFilterRender.initGlFilter(context: Context?).
  2. Observe that the nullable value is passed to GlUtil.getStringFromRaw.
  3. Observe that GlUtil.getStringFromRaw calls context.getResources() without a null check.
  4. Please confirm whether Context is guaranteed to be non-null whenever BaseFilterRender.initGl is called.

No direct initGlFilter(null) call was found in the repository. However, BaseFilterRender.initGl(...) is public, its Java Context parameter has no @NonNull annotation, and the nullability contract is not explicit.

Expected behavior

The nullability contract should be explicit:

If Context must always be non-null, the Java parameters should be annotated as non-null and the Kotlin override should use Context instead of Context?.
If null is a valid input, the code should handle it before calling GlUtil.getStringFromRaw.

Screenshots

Not applicable. This is a source-level nullability finding.

Smartphone (please complete the following information)

Library version: 2.8.1
Source commit: ebb9b4b0cc5c54d58efbd18a760ca5b7e50d3fc7
Device: Not reproduced on a device yet
OS: Not reproduced on a device yet
Media server: Not applicable
Class used: CropFilterRender / BaseFilterRender

Additional context

The normal internal rendering path appears to provide a non-null Context, but the public initialization contract does not make this requirement explicit.

A possible fix is to:

Add @NonNull to the Java filter initialization parameters.
Change CropFilterRender.initGlFilter to accept Context.
Store the MainRender context as a non-null initialized value.
Add a regression test covering the filter initialization path.

Could you please clarify whether this should be considered:

  1. a confirmed bug,
  2. an intentional non-null contract,
  3. a false positive, or
  4. a case that requires a specific Android/GL lifecycle to reproduce?
Dominant language
Kotlin
Stars
3k
Forks
946
Avg merge
4d 6h
Merged PRs (30d)
9

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from pedroSG94/RootEncoder

All issues in pedroSG94/RootEncoder

Similar issues

More Kotlin issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.