@@ -173,17 +173,22 @@ bool GoogleAccessTokenProcessor::resolveAndValidate(const TokenCredentials & cre
173
173
{
174
174
auto groups_response = getObjectFromURI (get_groups_uri, token);
175
175
176
- if (!groups_response.contains (" memberships" )) {
176
+ if (!groups_response.contains (" memberships" ) || !groups_response[" memberships" ].is <picojson::array>())
177
+ {
177
178
LOG_TRACE (getLogger (" AccessTokenProcessor" ),
178
179
" {}: Failed to get Google groups: invalid content in response from server" , name);
179
180
return true ;
180
181
}
181
182
182
- picojson::array groups_array = groups_response[" memberships" ].get <picojson::array>();
183
-
184
- // / TODO: check for invalid JSON, LOG something meaningful
185
- for (const auto & group: groups_array)
183
+ for (const auto & group: groups_response[" memberships" ].get <picojson::array>())
186
184
{
185
+ if (!group.is <picojson::object>())
186
+ {
187
+ LOG_TRACE (getLogger (" AccessTokenProcessor" ),
188
+ " {}: Failed to get Google groups: invalid content in response from server" , name);
189
+ continue ;
190
+ }
191
+
187
192
auto group_data = group.get <picojson::object>();
188
193
String group_name = getValueByKey (group_data[" groupKey" ].get <picojson::object>(), " id" );
189
194
external_groups_names.insert (group_name);
@@ -267,22 +272,29 @@ bool AzureAccessTokenProcessor::resolveAndValidate(const TokenCredentials & cred
267
272
{
268
273
auto groups_response = getObjectFromURI (get_groups_uri, token);
269
274
270
- if (!groups_response.contains (" value" )) {
275
+ if (!groups_response.contains (" value" ) || !groups_response[" value" ].is <picojson::array>())
276
+ {
271
277
LOG_TRACE (getLogger (" AccessTokenProcessor" ),
272
278
" {}: Failed to get Azure groups: invalid content in response from server" , name);
273
279
return true ;
274
280
}
275
281
276
282
picojson::array groups_array = groups_response[" value" ].get <picojson::array>();
277
283
278
- // / TODO: check for invalid JSON
279
284
for (const auto & group: groups_array)
280
285
{
286
+ // / Got some invalid response. Ignore this, log this.
287
+ if (!group.is <picojson::object >())
288
+ {
289
+ LOG_TRACE (getLogger (" AccessTokenProcessor" ),
290
+ " {}: Failed to get Azure groups: invalid content in response from server" , name);
291
+ continue ;
292
+ }
293
+
281
294
auto group_data = group.get <picojson::object>();
282
295
String group_name = getValueByKey (group_data, " id" );
283
296
external_groups_names.insert (group_name);
284
- LOG_TRACE (getLogger (" AccessTokenProcessor" ),
285
- " {}: User {}: new external group {}" , name, credentials.getUserName (), group_name);
297
+ LOG_TRACE (getLogger (" AccessTokenProcessor" ), " {}: User {}: new external group {}" , name, credentials.getUserName (), group_name);
286
298
}
287
299
}
288
300
catch (const Exception & e)
0 commit comments