Commit b2b0357
authored
fix(frontend): sanitize customize numeric url params (JhaSourav07#3133)
## Description
Fixes JhaSourav07#3070
This fixes the Customize page hydration path for numeric URL params. The
page was reading `radius`, `width`, `height`, and `grace` with
`Number(...)`, so malformed values like `radius=abc` or `width=NaN`
could become `NaN` in component state and then leak into the generated
badge URL.
I added a small numeric search-param reader that only accepts finite
integers inside the expected UI ranges, then falls back to the same
defaults the page already used. This keeps the customizer usable when
someone lands on a malformed shared URL instead of hydrating broken
control state.
## Pillar
- [x] 🛠️ Other (Bug fix, refactoring, docs)
## What changed
- Sanitized `radius`, `width`, `height`, and `grace` while reading
Customize URL params.
- Preserved valid values and existing fallback behavior.
- Added a regression test for malformed numeric query params so `NaN`
does not appear in the generated URL snippet.
## GSSoC 2026
This PR is raised as part of GSSoC 2026. Please add the relevant GSSoC
label if it is not applied automatically.
## Visual Preview
N/A — this is a URL state handling fix for the Customize controls.
## Validation
```bash
npm run test -- app/customize/page.test.tsx
npm run format
npm run format:check
npm run lint
npm run typecheck
npm run test -- services/github/refresh-rate-limiter.massive-scaling.test.ts
```
`npm run lint` passes with existing warnings outside this change. A full
`npm run test` hit unrelated timing thresholds in
`services/github/refresh-rate-limiter.massive-scaling.test.ts`;
rerunning that file in isolation passed.
## Checklist before requesting a review:
- [x] I have read the `CONTRIBUTING.md` file.
- [x] I have tested these changes locally
(`localhost:3000/api/streak?user=YOUR_USERNAME`).
- [x] I have run `npm run format` and `npm run lint` locally and
resolved all errors.
- [x] My commits follow the Conventional Commits format.
- [x] I have updated `README.md` if I added a new theme or URL
parameter.
- [x] I have starred the repo.
- [x] I have made sure that I have only one commit to merge in this PR.
- [x] The SVG output matches the CommitPulse quality standard.2 files changed
Lines changed: 80 additions & 19 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
18 | 18 | | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
19 | 26 | | |
20 | 27 | | |
21 | 28 | | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
22 | 33 | | |
23 | 34 | | |
24 | 35 | | |
| |||
39 | 50 | | |
40 | 51 | | |
41 | 52 | | |
42 | | - | |
| 53 | + | |
43 | 54 | | |
44 | 55 | | |
45 | 56 | | |
| |||
48 | 59 | | |
49 | 60 | | |
50 | 61 | | |
51 | | - | |
| 62 | + | |
52 | 63 | | |
53 | 64 | | |
54 | 65 | | |
55 | 66 | | |
56 | 67 | | |
57 | 68 | | |
| 69 | + | |
58 | 70 | | |
59 | 71 | | |
60 | 72 | | |
61 | 73 | | |
62 | 74 | | |
63 | 75 | | |
64 | 76 | | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
65 | 80 | | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
78 | 95 | | |
79 | 96 | | |
80 | 97 | | |
| |||
86 | 103 | | |
87 | 104 | | |
88 | 105 | | |
| 106 | + | |
89 | 107 | | |
90 | 108 | | |
91 | 109 | | |
| |||
126 | 144 | | |
127 | 145 | | |
128 | 146 | | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
129 | 169 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
26 | 47 | | |
27 | 48 | | |
28 | 49 | | |
| |||
76 | 97 | | |
77 | 98 | | |
78 | 99 | | |
79 | | - | |
| 100 | + | |
80 | 101 | | |
81 | 102 | | |
82 | 103 | | |
83 | 104 | | |
84 | 105 | | |
85 | 106 | | |
86 | | - | |
87 | | - | |
88 | | - | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
89 | 110 | | |
90 | 111 | | |
91 | 112 | | |
| |||
0 commit comments