Commit 57963d2
Round 2 security and robustness fixes
Security:
- Real timeout: use child_process.spawn with SIGTERM/SIGKILL on timeout
(previous setTimeout was a no-op that never killed the process)
- Sanitize PR bodies for </pr-data> delimiter injection (was only on title/labels)
- Restrict git subcommands in prompt: only git log/diff/show, block git -c/config/aliases
- Fix repo name regex to allow dots in repo names (e.g. foo.bar)
Robustness:
- Detect silent AI failures: warn when PRs found but 0 entries generated
- Track failed PR fetches: warn on partial failures, throw if all fetches fail
(previously silently returned empty results indistinguishable from 'no PRs')
Tests:
- Fix broken pr-data sanitization test (was passing vacuously)
- Add git subcommand restriction test
- 35 tests passing
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>1 parent c70a881 commit 57963d2
10 files changed
Lines changed: 211 additions & 101 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
57 | 66 | | |
58 | 67 | | |
59 | 68 | | |
| |||
109 | 118 | | |
110 | 119 | | |
111 | 120 | | |
112 | | - | |
| 121 | + | |
113 | 122 | | |
114 | 123 | | |
115 | 124 | | |
116 | 125 | | |
117 | | - | |
| 126 | + | |
118 | 127 | | |
119 | 128 | | |
120 | 129 | | |
121 | 130 | | |
122 | 131 | | |
123 | 132 | | |
124 | | - | |
125 | | - | |
126 | | - | |
127 | | - | |
128 | | - | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
129 | 147 | | |
130 | 148 | | |
131 | 149 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
| 12 | + | |
12 | 13 | | |
13 | 14 | | |
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29962 | 29962 | | |
29963 | 29963 | | |
29964 | 29964 | | |
29965 | | - | |
29966 | 29965 | | |
29967 | 29966 | | |
| 29967 | + | |
| 29968 | + | |
29968 | 29969 | | |
29969 | 29970 | | |
29970 | 29971 | | |
| |||
30019 | 30020 | | |
30020 | 30021 | | |
30021 | 30022 | | |
30022 | | - | |
| 30023 | + | |
| 30024 | + | |
30023 | 30025 | | |
30024 | 30026 | | |
30025 | 30027 | | |
| |||
30032 | 30034 | | |
30033 | 30035 | | |
30034 | 30036 | | |
30035 | | - | |
30036 | | - | |
30037 | | - | |
30038 | | - | |
30039 | | - | |
30040 | | - | |
30041 | | - | |
30042 | | - | |
30043 | | - | |
30044 | | - | |
30045 | | - | |
30046 | | - | |
30047 | | - | |
30048 | | - | |
30049 | | - | |
30050 | | - | |
30051 | | - | |
30052 | | - | |
30053 | | - | |
| 30037 | + | |
| 30038 | + | |
| 30039 | + | |
| 30040 | + | |
| 30041 | + | |
| 30042 | + | |
| 30043 | + | |
30054 | 30044 | | |
30055 | | - | |
30056 | | - | |
30057 | | - | |
30058 | | - | |
30059 | | - | |
30060 | | - | |
30061 | | - | |
30062 | | - | |
30063 | | - | |
30064 | | - | |
30065 | | - | |
30066 | | - | |
30067 | | - | |
30068 | | - | |
30069 | | - | |
| 30045 | + | |
| 30046 | + | |
| 30047 | + | |
| 30048 | + | |
| 30049 | + | |
| 30050 | + | |
| 30051 | + | |
| 30052 | + | |
| 30053 | + | |
| 30054 | + | |
| 30055 | + | |
| 30056 | + | |
| 30057 | + | |
| 30058 | + | |
| 30059 | + | |
| 30060 | + | |
| 30061 | + | |
| 30062 | + | |
| 30063 | + | |
| 30064 | + | |
| 30065 | + | |
| 30066 | + | |
| 30067 | + | |
| 30068 | + | |
| 30069 | + | |
| 30070 | + | |
| 30071 | + | |
| 30072 | + | |
| 30073 | + | |
| 30074 | + | |
| 30075 | + | |
| 30076 | + | |
| 30077 | + | |
| 30078 | + | |
| 30079 | + | |
| 30080 | + | |
| 30081 | + | |
| 30082 | + | |
| 30083 | + | |
30070 | 30084 | | |
30071 | 30085 | | |
30072 | 30086 | | |
| |||
30144 | 30158 | | |
30145 | 30159 | | |
30146 | 30160 | | |
| 30161 | + | |
| 30162 | + | |
| 30163 | + | |
| 30164 | + | |
| 30165 | + | |
| 30166 | + | |
| 30167 | + | |
| 30168 | + | |
| 30169 | + | |
30147 | 30170 | | |
30148 | 30171 | | |
30149 | 30172 | | |
| |||
30560 | 30583 | | |
30561 | 30584 | | |
30562 | 30585 | | |
30563 | | - | |
30564 | | - | |
| 30586 | + | |
| 30587 | + | |
| 30588 | + | |
| 30589 | + | |
30565 | 30590 | | |
30566 | 30591 | | |
30567 | 30592 | | |
| |||
30624 | 30649 | | |
30625 | 30650 | | |
30626 | 30651 | | |
30627 | | - | |
30628 | | - | |
| 30652 | + | |
| 30653 | + | |
| 30654 | + | |
| 30655 | + | |
| 30656 | + | |
30629 | 30657 | | |
30630 | 30658 | | |
30631 | 30659 | | |
| |||
30751 | 30779 | | |
30752 | 30780 | | |
30753 | 30781 | | |
30754 | | - | |
| 30782 | + | |
30755 | 30783 | | |
30756 | 30784 | | |
30757 | 30785 | | |
30758 | 30786 | | |
30759 | | - | |
| 30787 | + | |
30760 | 30788 | | |
30761 | 30789 | | |
30762 | 30790 | | |
| |||
30776 | 30804 | | |
30777 | 30805 | | |
30778 | 30806 | | |
30779 | | - | |
| 30807 | + | |
| 30808 | + | |
| 30809 | + | |
| 30810 | + | |
| 30811 | + | |
| 30812 | + | |
| 30813 | + | |
| 30814 | + | |
| 30815 | + | |
| 30816 | + | |
| 30817 | + | |
30780 | 30818 | | |
30781 | 30819 | | |
30782 | 30820 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | 1 | | |
3 | 2 | | |
| 3 | + | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
74 | 75 | | |
75 | 76 | | |
76 | 77 | | |
77 | | - | |
| 78 | + | |
| 79 | + | |
78 | 80 | | |
79 | 81 | | |
80 | 82 | | |
| |||
94 | 96 | | |
95 | 97 | | |
96 | 98 | | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
108 | 103 | | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
120 | 107 | | |
121 | 108 | | |
122 | | - | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
123 | 123 | | |
124 | | - | |
125 | | - | |
126 | | - | |
127 | | - | |
128 | | - | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
129 | 129 | | |
130 | | - | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
135 | 152 | | |
136 | | - | |
137 | | - | |
138 | | - | |
139 | | - | |
140 | | - | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
141 | 158 | | |
0 commit comments