Skip to content

Commit 76b1349

Browse files
author
Paolo Tranquilli
committed
Merge branch 'main' into redsun82/rust-analyzer-update
2 parents d4b2ec0 + 86ecef6 commit 76b1349

File tree

167 files changed

+9609
-3621
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

167 files changed

+9609
-3621
lines changed

cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll

+3-1
Original file line numberDiff line numberDiff line change
@@ -1007,9 +1007,11 @@ private module DataFlowIntegrationInput implements SsaImpl::DataFlowIntegrationI
10071007
}
10081008
}
10091009

1010-
predicate guardControlsBlock(Guard guard, SsaInput::BasicBlock bb, boolean branch) {
1010+
predicate guardDirectlyControlsBlock(Guard guard, SsaInput::BasicBlock bb, boolean branch) {
10111011
guard.(IRGuards::IRGuardCondition).controls(bb, branch)
10121012
}
1013+
1014+
predicate keepAllPhiInputBackEdges() { any() }
10131015
}
10141016

10151017
private module DataFlowIntegrationImpl = SsaImpl::DataFlowIntegration<DataFlowIntegrationInput>;

cpp/ql/src/Diagnostics/ExtractionWarnings.ql

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@ where
1414
or
1515
warning instanceof ExtractionUnknownProblem
1616
select warning,
17-
"Extraction failed in " + warning.getFile() + " with warning " + warning.getProblemMessage(),
18-
warning.getSeverity()
17+
"Extraction failed in " + warning.getFile() + " with warning " +
18+
warning.getProblemMessage().replaceAll("$", "$$"), warning.getSeverity()

cpp/ql/src/Diagnostics/Internal/ExtractionErrors.ql

+3-2
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ from ExtractionError error
1717
where
1818
error instanceof ExtractionUnknownError or
1919
exists(error.getFile().getRelativePath())
20-
select error, "Extraction failed in " + error.getFile() + " with error " + error.getErrorMessage(),
21-
error.getSeverity()
20+
select error,
21+
"Extraction failed in " + error.getFile() + " with error " +
22+
error.getErrorMessage().replaceAll("$", "$$"), error.getSeverity()

cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected

+7-15
Original file line numberDiff line numberDiff line change
@@ -68,31 +68,23 @@
6868
| test.cpp:10:8:10:9 | t2 | test.cpp:11:7:11:8 | [input] SSA phi read(t2) |
6969
| test.cpp:10:8:10:9 | t2 | test.cpp:11:7:11:8 | [input] SSA phi(*t2) |
7070
| test.cpp:10:8:10:9 | t2 | test.cpp:13:10:13:11 | t2 |
71-
| test.cpp:11:7:11:8 | [input] SSA phi read(t2) | test.cpp:15:3:15:6 | SSA phi read(t2) |
72-
| test.cpp:11:7:11:8 | [input] SSA phi(*t2) | test.cpp:15:3:15:6 | SSA phi(*t2) |
71+
| test.cpp:11:7:11:8 | [input] SSA phi read(t2) | test.cpp:15:8:15:9 | t2 |
72+
| test.cpp:11:7:11:8 | [input] SSA phi(*t2) | test.cpp:15:8:15:9 | t2 |
7373
| test.cpp:11:7:11:8 | t1 | test.cpp:21:8:21:9 | t1 |
7474
| test.cpp:12:5:12:10 | ... = ... | test.cpp:13:10:13:11 | t2 |
7575
| test.cpp:12:10:12:10 | 0 | test.cpp:12:5:12:10 | ... = ... |
76-
| test.cpp:13:5:13:8 | [input] SSA phi read(t2) | test.cpp:15:3:15:6 | SSA phi read(t2) |
77-
| test.cpp:13:5:13:8 | [input] SSA phi(*t2) | test.cpp:15:3:15:6 | SSA phi(*t2) |
78-
| test.cpp:13:10:13:11 | t2 | test.cpp:13:5:13:8 | [input] SSA phi read(t2) |
79-
| test.cpp:13:10:13:11 | t2 | test.cpp:13:5:13:8 | [input] SSA phi(*t2) |
80-
| test.cpp:15:3:15:6 | SSA phi read(t2) | test.cpp:15:8:15:9 | t2 |
81-
| test.cpp:15:3:15:6 | SSA phi(*t2) | test.cpp:15:8:15:9 | t2 |
76+
| test.cpp:13:10:13:11 | t2 | test.cpp:15:8:15:9 | t2 |
77+
| test.cpp:13:10:13:11 | t2 | test.cpp:15:8:15:9 | t2 |
8278
| test.cpp:15:8:15:9 | t2 | test.cpp:23:15:23:16 | [input] SSA phi read(*t2) |
8379
| test.cpp:15:8:15:9 | t2 | test.cpp:23:15:23:16 | [input] SSA phi read(t2) |
8480
| test.cpp:17:3:17:8 | ... = ... | test.cpp:21:8:21:9 | t1 |
8581
| test.cpp:17:8:17:8 | 0 | test.cpp:17:3:17:8 | ... = ... |
86-
| test.cpp:21:8:21:9 | t1 | test.cpp:23:15:23:16 | [input] SSA phi read(t1) |
87-
| test.cpp:21:8:21:9 | t1 | test.cpp:23:15:23:16 | [input] SSA phi(*t1) |
82+
| test.cpp:21:8:21:9 | t1 | test.cpp:23:19:23:19 | SSA phi read(t1) |
83+
| test.cpp:21:8:21:9 | t1 | test.cpp:23:19:23:19 | SSA phi(*t1) |
8884
| test.cpp:23:15:23:16 | 0 | test.cpp:23:15:23:16 | 0 |
89-
| test.cpp:23:15:23:16 | 0 | test.cpp:23:15:23:16 | [input] SSA phi(*i) |
85+
| test.cpp:23:15:23:16 | 0 | test.cpp:23:19:23:19 | SSA phi(*i) |
9086
| test.cpp:23:15:23:16 | [input] SSA phi read(*t2) | test.cpp:23:19:23:19 | SSA phi read(*t2) |
91-
| test.cpp:23:15:23:16 | [input] SSA phi read(i) | test.cpp:23:19:23:19 | SSA phi read(i) |
92-
| test.cpp:23:15:23:16 | [input] SSA phi read(t1) | test.cpp:23:19:23:19 | SSA phi read(t1) |
9387
| test.cpp:23:15:23:16 | [input] SSA phi read(t2) | test.cpp:23:19:23:19 | SSA phi read(t2) |
94-
| test.cpp:23:15:23:16 | [input] SSA phi(*i) | test.cpp:23:19:23:19 | SSA phi(*i) |
95-
| test.cpp:23:15:23:16 | [input] SSA phi(*t1) | test.cpp:23:19:23:19 | SSA phi(*t1) |
9688
| test.cpp:23:19:23:19 | SSA phi read(*t2) | test.cpp:24:10:24:11 | t2 |
9789
| test.cpp:23:19:23:19 | SSA phi read(i) | test.cpp:23:19:23:19 | i |
9890
| test.cpp:23:19:23:19 | SSA phi read(t1) | test.cpp:23:23:23:24 | t1 |

cpp/ql/test/library-tests/preprocessor/preprocessor/pp.cpp

+124-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
// semmle-extractor-options: -I${testdir}/more_headers/ "-U SOME_SYM"
1111
#undef BAR
1212
#define SCARY(a,aa,aaah) /* we ignore a */ (aa /* but we take aa */) /* and we ignore aaa */
13-
#define LOG(fmt, ...) printf("Warning: %s", fmt, __VA__ARGS__)
13+
#define LOG(fmt, ...) printf("Warning: %s", fmt, __VA__ARGS__)
1414
#include "pp.h"
1515

1616
#if 0
@@ -59,7 +59,7 @@ class templateClassContext
5959
#else
6060
#define IN_TEMPLATE
6161
#endif
62-
62+
6363
static int val;
6464
};
6565

@@ -71,7 +71,128 @@ templateClassContext<int> tcci;
7171

7272
#define BAR
7373

74-
#if defined(BAR) && \
74+
#if defined(BAR) &&\
7575
defined(BAR)
7676
#warning BAR defined
7777
#endif
78+
79+
#if defined MACROTHREE/**hello*/ && /*world*/\
80+
/*hw*/ (defined(MACROONE)) /* macroone */
81+
#endif
82+
83+
#if defined SIMPLE_COMMENT //this comment \
84+
(defined(SIMPLE_COMMENT)) spans over multiple lines
85+
#endif
86+
87+
#if defined(FOO) &&\
88+
defined(BAR)
89+
#define CONDITIONAL_MACRO_1 1
90+
#endif
91+
92+
#if defined(FOO) && \
93+
defined(BAR) && \
94+
!defined(BAZ)
95+
#define CONDITIONAL_MACRO_2 2
96+
#endif
97+
98+
#define FOO 8
99+
#define BAR 2
100+
#define BAZ 4
101+
#if ((FOO / BAR) \
102+
== 4) && ((BAZ \
103+
* QUX) \
104+
> 10)
105+
#define CONDITIONAL_MACRO_3 3
106+
#endif
107+
108+
// Testing \t spaced PreprocessorIf
109+
#if defined(FOO) && \
110+
defined(BAR) && \
111+
defined(BAZ)
112+
#define CONDITIONAL_MACRO_4 4
113+
#endif
114+
115+
116+
#if defined /* //test */ SIMPLE_COMMENT //this comment \
117+
(defined(SIMPLE_COMMENT)) spans over multiple lines
118+
#endif
119+
120+
#warning foo \
121+
122+
#warning foo \
123+
\
124+
/* a comment */
125+
126+
#warning foo \
127+
\
128+
129+
#warning foo \
130+
\
131+
// a comment
132+
133+
134+
#define FOO 8
135+
#define BAR 2
136+
#define BAZ 4
137+
#if ((FOO / BAR) \
138+
== 4) && ((BAZ \
139+
/** comment */ \
140+
* QUX) \
141+
/** comment */ \
142+
> 10)
143+
#define CONDITIONAL_MACRO_3 3
144+
#endif
145+
146+
#define X 1
147+
#define Y 2
148+
#if defined(X) && \
149+
/*this is a comment*/ defined(Y) \
150+
// another comment
151+
#endif
152+
153+
#warning FOO\
154+
\
155+
\
156+
\
157+
BAR
158+
159+
160+
#warning foo \
161+
\
162+
/* comment */ \
163+
\
164+
165+
166+
#if/** */A/* ... */&&B
167+
#endif
168+
169+
170+
#if/** */ /**/ A
171+
#endif
172+
173+
#if \
174+
\
175+
A && B
176+
#endif
177+
178+
179+
#ifdef /*
180+
181+
182+
183+
*/ FOOBAR
184+
#warning a
185+
#else
186+
#warning b
187+
#endif
188+
189+
190+
#if /*
191+
192+
//test
193+
194+
*/ FOOBAR
195+
#endif
196+
197+
#if/*...*//*...*/A
198+
#endif

cpp/ql/test/library-tests/preprocessor/preprocessor/preproc.expected

+51-4
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,64 @@
3333
| pp.cpp:0:0:0:0 | pp.cpp | 50 | 2 | 50 | 48 | Macro | MACRO_TEMPLATECLASSCONTEXT_REFERENCED | 5 |
3434
| pp.cpp:0:0:0:0 | pp.cpp | 54 | 3 | 54 | 39 | Macro | MACRO_TEMPLATEMETHODCONTEXT | 6 |
3535
| pp.cpp:0:0:0:0 | pp.cpp | 57 | 1 | 57 | 21 | PreprocessorIfdef | INSTANTIATION | N/A |
36-
| pp.cpp:0:0:0:0 | pp.cpp | 59 | 1 | 59 | 6 | PreprocessorElse | N/A | N/A |
36+
| pp.cpp:0:0:0:0 | pp.cpp | 59 | 1 | 59 | 6 | PreprocessorElse | | N/A |
3737
| pp.cpp:0:0:0:0 | pp.cpp | 60 | 3 | 60 | 21 | Macro | IN_TEMPLATE | |
38-
| pp.cpp:0:0:0:0 | pp.cpp | 61 | 1 | 61 | 7 | PreprocessorEndif | N/A | N/A |
38+
| pp.cpp:0:0:0:0 | pp.cpp | 61 | 1 | 61 | 7 | PreprocessorEndif | | N/A |
3939
| pp.cpp:0:0:0:0 | pp.cpp | 69 | 1 | 69 | 21 | Macro | INSTANTIATION | |
4040
| pp.cpp:0:0:0:0 | pp.cpp | 72 | 1 | 72 | 11 | Macro | BAR | |
41-
| pp.cpp:0:0:0:0 | pp.cpp | 74 | 1 | 74 | 21 | PreprocessorIf | defined(BAR) && \\ | N/A |
41+
| pp.cpp:0:0:0:0 | pp.cpp | 74 | 1 | 75 | 14 | PreprocessorIf | defined(BAR) && defined(BAR) | N/A |
4242
| pp.cpp:0:0:0:0 | pp.cpp | 76 | 1 | 76 | 20 | PreprocessorWarning | BAR defined | N/A |
4343
| pp.cpp:0:0:0:0 | pp.cpp | 77 | 1 | 77 | 6 | PreprocessorEndif | N/A | N/A |
44+
| pp.cpp:0:0:0:0 | pp.cpp | 79 | 1 | 80 | 26 | PreprocessorIf | defined MACROTHREE && (defined(MACROONE)) | N/A |
45+
| pp.cpp:0:0:0:0 | pp.cpp | 81 | 1 | 81 | 6 | PreprocessorEndif | N/A | N/A |
46+
| pp.cpp:0:0:0:0 | pp.cpp | 83 | 1 | 83 | 26 | PreprocessorIf | defined SIMPLE_COMMENT | N/A |
47+
| pp.cpp:0:0:0:0 | pp.cpp | 85 | 1 | 85 | 6 | PreprocessorEndif | N/A | N/A |
48+
| pp.cpp:0:0:0:0 | pp.cpp | 87 | 1 | 88 | 16 | PreprocessorIf | defined(FOO) && defined(BAR) | N/A |
49+
| pp.cpp:0:0:0:0 | pp.cpp | 90 | 1 | 90 | 6 | PreprocessorEndif | N/A | N/A |
50+
| pp.cpp:0:0:0:0 | pp.cpp | 92 | 1 | 94 | 17 | PreprocessorIf | defined(FOO) && defined(BAR) && !defined(BAZ) | N/A |
51+
| pp.cpp:0:0:0:0 | pp.cpp | 96 | 1 | 96 | 6 | PreprocessorEndif | N/A | N/A |
52+
| pp.cpp:0:0:0:0 | pp.cpp | 98 | 1 | 98 | 13 | Macro | FOO | 8 |
53+
| pp.cpp:0:0:0:0 | pp.cpp | 99 | 1 | 99 | 13 | Macro | BAR | 2 |
54+
| pp.cpp:0:0:0:0 | pp.cpp | 100 | 1 | 100 | 13 | Macro | BAZ | 4 |
55+
| pp.cpp:0:0:0:0 | pp.cpp | 101 | 1 | 104 | 8 | PreprocessorIf | ((FOO / BAR) == 4) && ((BAZ * QUX) > 10) | N/A |
56+
| pp.cpp:0:0:0:0 | pp.cpp | 106 | 1 | 106 | 6 | PreprocessorEndif | N/A | N/A |
57+
| pp.cpp:0:0:0:0 | pp.cpp | 109 | 1 | 111 | 13 | PreprocessorIf | defined(FOO) && defined(BAR) && defined(BAZ) | N/A |
58+
| pp.cpp:0:0:0:0 | pp.cpp | 112 | 1 | 112 | 29 | Macro | CONDITIONAL_MACRO_4 | 4 |
59+
| pp.cpp:0:0:0:0 | pp.cpp | 113 | 1 | 113 | 6 | PreprocessorEndif | N/A | N/A |
60+
| pp.cpp:0:0:0:0 | pp.cpp | 116 | 1 | 116 | 39 | PreprocessorIf | defined SIMPLE_COMMENT | N/A |
61+
| pp.cpp:0:0:0:0 | pp.cpp | 118 | 1 | 118 | 6 | PreprocessorEndif | N/A | N/A |
62+
| pp.cpp:0:0:0:0 | pp.cpp | 120 | 1 | 120 | 12 | PreprocessorWarning | foo | N/A |
63+
| pp.cpp:0:0:0:0 | pp.cpp | 122 | 1 | 122 | 12 | PreprocessorWarning | foo | N/A |
64+
| pp.cpp:0:0:0:0 | pp.cpp | 126 | 1 | 126 | 12 | PreprocessorWarning | foo | N/A |
65+
| pp.cpp:0:0:0:0 | pp.cpp | 129 | 1 | 129 | 12 | PreprocessorWarning | foo | N/A |
66+
| pp.cpp:0:0:0:0 | pp.cpp | 134 | 1 | 134 | 13 | Macro | FOO | 8 |
67+
| pp.cpp:0:0:0:0 | pp.cpp | 135 | 1 | 135 | 13 | Macro | BAR | 2 |
68+
| pp.cpp:0:0:0:0 | pp.cpp | 136 | 1 | 136 | 13 | Macro | BAZ | 4 |
69+
| pp.cpp:0:0:0:0 | pp.cpp | 137 | 1 | 142 | 8 | PreprocessorIf | ((FOO / BAR) == 4) && ((BAZ * QUX) > 10) | N/A |
70+
| pp.cpp:0:0:0:0 | pp.cpp | 144 | 1 | 144 | 6 | PreprocessorEndif | N/A | N/A |
71+
| pp.cpp:0:0:0:0 | pp.cpp | 146 | 1 | 146 | 11 | Macro | X | 1 |
72+
| pp.cpp:0:0:0:0 | pp.cpp | 147 | 1 | 147 | 11 | Macro | Y | 2 |
73+
| pp.cpp:0:0:0:0 | pp.cpp | 148 | 1 | 149 | 36 | PreprocessorIf | defined(X) && defined(Y) | N/A |
74+
| pp.cpp:0:0:0:0 | pp.cpp | 151 | 1 | 151 | 6 | PreprocessorEndif | N/A | N/A |
75+
| pp.cpp:0:0:0:0 | pp.cpp | 153 | 1 | 157 | 3 | PreprocessorWarning | FOO BAR | N/A |
76+
| pp.cpp:0:0:0:0 | pp.cpp | 160 | 1 | 160 | 12 | PreprocessorWarning | foo | N/A |
77+
| pp.cpp:0:0:0:0 | pp.cpp | 166 | 1 | 166 | 22 | PreprocessorIf | A &&B | N/A |
78+
| pp.cpp:0:0:0:0 | pp.cpp | 167 | 1 | 167 | 6 | PreprocessorEndif | N/A | N/A |
79+
| pp.cpp:0:0:0:0 | pp.cpp | 170 | 1 | 170 | 20 | PreprocessorIf | A | N/A |
80+
| pp.cpp:0:0:0:0 | pp.cpp | 171 | 1 | 171 | 6 | PreprocessorEndif | N/A | N/A |
81+
| pp.cpp:0:0:0:0 | pp.cpp | 173 | 1 | 175 | 6 | PreprocessorIf | A && B | N/A |
82+
| pp.cpp:0:0:0:0 | pp.cpp | 176 | 1 | 176 | 6 | PreprocessorEndif | N/A | N/A |
83+
| pp.cpp:0:0:0:0 | pp.cpp | 179 | 1 | 183 | 9 | PreprocessorIfdef | FOOBAR | N/A |
84+
| pp.cpp:0:0:0:0 | pp.cpp | 185 | 1 | 185 | 5 | PreprocessorElse | N/A | N/A |
85+
| pp.cpp:0:0:0:0 | pp.cpp | 186 | 1 | 186 | 10 | PreprocessorWarning | b | N/A |
86+
| pp.cpp:0:0:0:0 | pp.cpp | 187 | 1 | 187 | 6 | PreprocessorEndif | N/A | N/A |
87+
| pp.cpp:0:0:0:0 | pp.cpp | 190 | 1 | 194 | 9 | PreprocessorIf | FOOBAR | N/A |
88+
| pp.cpp:0:0:0:0 | pp.cpp | 195 | 1 | 195 | 6 | PreprocessorEndif | N/A | N/A |
89+
| pp.cpp:0:0:0:0 | pp.cpp | 197 | 1 | 197 | 18 | PreprocessorIf | A | N/A |
90+
| pp.cpp:0:0:0:0 | pp.cpp | 198 | 1 | 198 | 6 | PreprocessorEndif | N/A | N/A |
4491
| pp.h:0:0:0:0 | pp.h | 1 | 1 | 1 | 12 | PreprocessorPragma | once | N/A |
4592
| pp.h:0:0:0:0 | pp.h | 2 | 1 | 2 | 29 | PreprocessorWarning | "This should happen" | N/A |
46-
| pp.h:0:0:0:0 | pp.h | 3 | 1 | 3 | 27 | PreprocessorLine | 33 "emerald_city.h" | N/A |
93+
| pp.h:0:0:0:0 | pp.h | 3 | 1 | 3 | 27 | PreprocessorLine | 33 "emerald_city.h" | N/A |
4794
| pp.h:0:0:0:0 | pp.h | 4 | 1 | 4 | 30 | PreprocessorPragma | byte_order(big_endian) | N/A |
4895
| pp.h:0:0:0:0 | pp.h | 5 | 1 | 5 | 33 | PreprocessorWarning | "Not in Kansas any more" | N/A |
4996
| pp.h:0:0:0:0 | pp.h | 7 | 1 | 11 | 8 | Macro | MULTILINE | world a long |
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
| containserror.cpp:9:14:9:14 | Recoverable extraction error: 'x' has already been declared in the current scope | Extraction failed in containserror.cpp with error "containserror.cpp", line 9: error: "x" has already been declared in the current scope\n \tconst char *x = "Foo2 $$@ bar2 $$@ baz2";\n \t ^\n\n | 2 |
12
| doesnotcompile.cpp:4:2:4:2 | Recoverable extraction error: identifier 'This' is undefined | Extraction failed in doesnotcompile.cpp with error "doesnotcompile.cpp", line 4: error: identifier "This" is undefined\n \tThis is not correct C/C++ code.\n \t^\n\n | 2 |
23
| doesnotcompile.cpp:4:10:4:10 | Recoverable extraction error: expected a ';' | Extraction failed in doesnotcompile.cpp with error "doesnotcompile.cpp", line 4: error: expected a ";"\n \tThis is not correct C/C++ code.\n \t ^\n\n | 2 |
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
| containserror.cpp:9:14:9:14 | Recoverable extraction error: 'x' has already been declared in the current scope | Extraction failed in containserror.cpp with warning "containserror.cpp", line 9: error: "x" has already been declared in the current scope\n \tconst char *x = "Foo2 $$@ bar2 $$@ baz2";\n \t ^\n\n | 1 |
12
| doesnotcompile.cpp:4:2:4:2 | Recoverable extraction error: identifier 'This' is undefined | Extraction failed in doesnotcompile.cpp with warning "doesnotcompile.cpp", line 4: error: identifier "This" is undefined\n \tThis is not correct C/C++ code.\n \t^\n\n | 1 |
23
| doesnotcompile.cpp:4:10:4:10 | Recoverable extraction error: expected a ';' | Extraction failed in doesnotcompile.cpp with warning "doesnotcompile.cpp", line 4: error: expected a ";"\n \tThis is not correct C/C++ code.\n \t ^\n\n | 1 |

cpp/ql/test/query-tests/Diagnostics/Info.expected

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
| containserror.cpp:0:0:0:0 | containserror.cpp | containserror.cpp | fromSource, normalTermination |
1+
| containserror.cpp:0:0:0:0 | containserror.cpp | containserror.cpp | ExtractionProblem (severity 1), fromSource, normalTermination |
22
| containswarning.cpp:0:0:0:0 | containswarning.cpp | containswarning.cpp | fromSource, normalTermination |
33
| doesnotcompile.cpp:0:0:0:0 | doesnotcompile.cpp | doesnotcompile.cpp | ExtractionProblem (severity 1), fromSource, normalTermination |
44
| file://:0:0:0:0 | | | |

cpp/ql/test/query-tests/Diagnostics/containserror.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,8 @@
33
void containserror() {
44
#error An error!
55
}
6+
7+
void error_with_placeholder() {
8+
const char *x = "Foo1 $@ bar1 $@ baz1";
9+
const char *x = "Foo2 $@ bar2 $@ baz2";
10+
}

csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependabotProxy.cs

+47-1
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
11
using System;
2-
using System.Diagnostics;
2+
using System.Collections.Generic;
33
using System.IO;
44
using System.Security.Cryptography.X509Certificates;
55
using Semmle.Util;
66
using Semmle.Util.Logging;
7+
using Newtonsoft.Json;
78

89
namespace Semmle.Extraction.CSharp.DependencyFetching
910
{
1011
public class DependabotProxy : IDisposable
1112
{
13+
/// <summary>
14+
/// Represents configurations for package registries.
15+
/// </summary>
16+
/// <param name="Type">The type of package registry.</param>
17+
/// <param name="URL">The URL of the package registry.</param>
18+
public record class RegistryConfig(string Type, string URL);
19+
1220
private readonly string host;
1321
private readonly string port;
1422

@@ -17,6 +25,10 @@ public class DependabotProxy : IDisposable
1725
/// </summary>
1826
internal string Address { get; }
1927
/// <summary>
28+
/// The URLs of package registries that are configured for the proxy.
29+
/// </summary>
30+
internal HashSet<string> RegistryURLs { get; }
31+
/// <summary>
2032
/// The path to the temporary file where the certificate is stored.
2133
/// </summary>
2234
internal string? CertificatePath { get; private set; }
@@ -67,6 +79,39 @@ public class DependabotProxy : IDisposable
6779
result.Certificate = X509Certificate2.CreateFromPem(cert);
6880
}
6981

82+
// Try to obtain the list of private registry URLs.
83+
var registryURLs = Environment.GetEnvironmentVariable(EnvironmentVariableNames.ProxyURLs);
84+
85+
if (!string.IsNullOrWhiteSpace(registryURLs))
86+
{
87+
try
88+
{
89+
// The value of the environment variable should be a JSON array of objects, such as:
90+
// [ { "type": "nuget_feed", "url": "https://nuget.pkg.github.com/org/index.json" } ]
91+
var array = JsonConvert.DeserializeObject<List<RegistryConfig>>(registryURLs);
92+
if (array is not null)
93+
{
94+
foreach (RegistryConfig config in array)
95+
{
96+
// The array contains all configured private registries, not just ones for C#.
97+
// We ignore the non-C# ones here.
98+
if (!config.Type.Equals("nuget_feed"))
99+
{
100+
logger.LogDebug($"Ignoring registry at '{config.URL}' since it is not of type 'nuget_feed'.");
101+
continue;
102+
}
103+
104+
logger.LogInfo($"Found private registry at '{config.URL}'");
105+
result.RegistryURLs.Add(config.URL);
106+
}
107+
}
108+
}
109+
catch (JsonException ex)
110+
{
111+
logger.LogError($"Unable to parse '{EnvironmentVariableNames.ProxyURLs}': {ex.Message}");
112+
}
113+
}
114+
70115
return result;
71116
}
72117

@@ -75,6 +120,7 @@ private DependabotProxy(string host, string port)
75120
this.host = host;
76121
this.port = port;
77122
this.Address = $"http://{this.host}:{this.port}";
123+
this.RegistryURLs = new HashSet<string>();
78124
}
79125

80126
public void Dispose()

0 commit comments

Comments
 (0)