Bug: IndexSizeError: negative radius passed to canvas.arc when drawing box/label with non-positive size
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 68/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 静か
- 技術スタック
- chart.js, javascript
調査の方向性
アノテーションの描画パスと、スタックに記載されている addRoundedRectPath から始め、ボックスまたはラベルの幅と高さがどのように border-radius の clamp まで渡されるかを追跡します。0 以下の寸法が負の半径を CanvasRenderingContext2D.arc に渡せないようにするか、提案されているようにスキップされるようにします。完了の条件は、折りたたまれたチャートのケースで IndexSizeError が発生しなくなり、有効な角丸ボックスは引き続き描画されることです。
索引モデルが issue の本文から書いたものです。
説明
When an annotation box (or label background) is drawn with a non-positive width/height — e.g. chart area briefly collapsed during layout/resize — the plugin clamps borderRadius with:
clamp(corners, 0, Math.min(w, h) / 2)
If w or h is negative, that max is negative, so even borderRadius: 0 becomes negative. Chart.js then calls ctx.arc(..., radius, ...) and the browser throws:
IndexSizeError: Failed to execute 'arc' on 'CanvasRenderingContext2D': The radius provided (…) is negative.
Where
Plugin: chartjs-plugin-annotation v3.0.1
Stack: annotation draw → addRoundedRectPath → CanvasRenderingContext2D.arc
Triggered in our app during chart expand/collapse / layout thrash (plot area briefly invalid)
Suggestion: Clamp radius with a non-negative max, e.g. Math.max(0, Math.min(w, h) / 2), or skip drawing when w <= 0 or h <= 0.
- 主要言語
- JavaScript
- スター
- 625
- フォーク
- 377
- 平均マージ
- 1日 9時間
- マージ済み PR(30日)
- 1
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
chartjs/chartjs-plugin-annotation のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 48/100
-
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
-
TypeScript type issues対応中かも @joshkel が 455 日前に担当しました。 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 38/100
-
enhancement
難易度 3/5 1〜2日 初心者へのやさしさ 35/100
chartjs/chartjs-plugin-annotation の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
Yomguithereal/mnemonist#247 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
up-for-grabs/up-for-grabs.net#6330 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1〜3時間 初心者へのやさしさ 72/100
TheOdinProject/curriculum#31490 ·
メンテナーはふだん 1 日以内に返信
-
bug require-triage
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
expressjs/expressjs.com#2549 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Docs: no path for someone who just wants to try Indiekit対応中かも @rmdes が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
getindiekit/indiekit#1028 ·
メンテナーはふだん 1 日以内に返信