Repository navigation
Commit 62b49b9
committed
fix(webview): validate the webview-supplied view state id before adopting it
The stable view state id arrives over the webview postMessage channel, so the
declared string type is not a guarantee: a crafted message could carry a
non-string value (which the sanitizer would crash on), an unbounded string
(unbounded growth in the shared viewStates map), or an id another live view
already owns (adopting it would load that view's pinned profile, overlay and
mode here, and let this webview overwrite that view's persisted entry).
setViewStateId now rejects non-strings, bounds the key length, and refuses
ids claimed by another live instance; a refused view stays on its temporary
id and keeps working against the shared state, so viewStateReadiness is
resolved on every refusal path to keep API-driven task creation off its
timeout. The spec gains an afterEach that clears the static instance
registry: the suite constructs providers directly and never disposes most
of them, and a leaked instance would otherwise claim ids ahead of later
tests.
Proofs: ClineProvider.sticky-mode.spec 33/33 (3 new tests: non-string,
oversized, claimed-by-another-view); negative controls: disabling the
ownership check reddens exactly the claim test, widening the length bound
reddens exactly the oversized test, restores byte-exact (hash match);
eslint --max-warnings=0 clean; tsc clean except the two known local
telemetry-dist noise lines; prettier ALL-MATCHED on touched files.1 parent 7d12560 commit 62b49b9
2 files changed
Lines changed: 87 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
216 | 216 | | |
217 | 217 | | |
218 | 218 | | |
| 219 | + | |
219 | 220 | | |
220 | 221 | | |
221 | 222 | | |
| |||
789 | 790 | | |
790 | 791 | | |
791 | 792 | | |
792 | | - | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
| 799 | + | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
793 | 808 | | |
794 | 809 | | |
795 | 810 | | |
| |||
806 | 821 | | |
807 | 822 | | |
808 | 823 | | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
| 841 | + | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
| 846 | + | |
| 847 | + | |
| 848 | + | |
| 849 | + | |
| 850 | + | |
| 851 | + | |
| 852 | + | |
809 | 853 | | |
810 | 854 | | |
811 | 855 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
121 | 121 | | |
122 | 122 | | |
123 | 123 | | |
| 124 | + | |
| 125 | + | |
124 | 126 | | |
125 | 127 | | |
126 | 128 | | |
| |||
221 | 223 | | |
222 | 224 | | |
223 | 225 | | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
224 | 233 | | |
225 | 234 | | |
226 | 235 | | |
| |||
1736 | 1745 | | |
1737 | 1746 | | |
1738 | 1747 | | |
| 1748 | + | |
| 1749 | + | |
| 1750 | + | |
| 1751 | + | |
| 1752 | + | |
| 1753 | + | |
| 1754 | + | |
| 1755 | + | |
| 1756 | + | |
| 1757 | + | |
| 1758 | + | |
| 1759 | + | |
| 1760 | + | |
| 1761 | + | |
| 1762 | + | |
| 1763 | + | |
| 1764 | + | |
| 1765 | + | |
| 1766 | + | |
| 1767 | + | |
| 1768 | + | |
| 1769 | + | |
| 1770 | + | |
| 1771 | + | |
| 1772 | + | |
| 1773 | + | |
| 1774 | + | |
| 1775 | + | |
| 1776 | + | |
| 1777 | + | |
| 1778 | + | |
| 1779 | + | |
| 1780 | + | |
1739 | 1781 | | |
0 commit comments