Potential NPE: missing non-null contract for Context in BaseFilterRender.initGl
メンテナーはふだん 2 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 48/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 領域
- mobile-dev
調査の方向性
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.
索引モデルが issue の本文から書いたものです。
説明
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.
- Inspect
CropFilterRender.initGlFilter(context: Context?). - Observe that the nullable value is passed to
GlUtil.getStringFromRaw. - Observe that
GlUtil.getStringFromRawcallscontext.getResources()without a null check. - Please confirm whether
Contextis guaranteed to be non-null wheneverBaseFilterRender.initGlis 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:
- a confirmed bug,
- an intentional non-null contract,
- a false positive, or
- a case that requires a specific Android/GL lifecycle to reproduce?
- 主要言語
- Kotlin
- スター
- 3k
- フォーク
- 946
- 平均マージ
- 4日 6時間
- マージ済み PR(30日)
- 9
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
pedroSG94/RootEncoder のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
pedroSG94/RootEncoder#2213 ·
メンテナーはふだん 2 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
pedroSG94/RootEncoder#2203 ·
メンテナーはふだん 2 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
pedroSG94/RootEncoder#2192 · コメント 2 件 ·
メンテナーはふだん 2 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
pedroSG94/RootEncoder#2177 · コメント 44 件 ·
メンテナーはふだん 2 日以内に返信
-
Docs/Migration: 1.x → 2.x breaking API changes are not documented (package rename, ConnectChecker rename)再び着手できるかも @pedroSG94 が 77 日前に担当しましたが、オープン中のプルリクエストはありません。 オープンenhancement
pedroSG94/RootEncoder#2118 · 担当者 1 名 ·
メンテナーはふだん 2 日以内に返信
pedroSG94/RootEncoder の issue をすべて見る
似ている issue
-
Dev
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
ankidroid/Anki-Android#22555 ·
メンテナーはふだん 1 日以内に返信
-
enhancement good first issue help wanted
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
bug core p3
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
RunanywhereAI/runanywhere-sdks#1083 ·
メンテナーはふだん 5 日以内に返信
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
メンテナーはふだん 1 日以内に返信
-
Java and Kotlin (JVM): parse gradle/wrapper/gradle-wrapper.properties with exact line locationsオープンarea: detector eco: java help wanted lane: free-agent roadmap size: S type: parser
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
arminazimi/evergreen#355 ·
メンテナーはふだん 1 日以内に返信