@@ -251,18 +251,19 @@ def _extract_referenced_ids_from_observable_objects(
251251
252252 def _fetch_multiple_observable_ids (
253253 self , observed_data : _OBSERVED_DATA_TYPING ,
254- object_id : str ) -> Generator :
255- yield object_id
254+ identifiers : set , object_id : str ) -> Generator :
255+ identifiers . add ( object_id )
256256 for key , value in observed_data .objects [object_id ].items ():
257- if key .endswith ('_ref' ):
258- yield from self ._fetch_multiple_observable_ids (
259- observed_data , value
257+ if key .endswith ('_ref' ) and value not in identifiers :
258+ self ._fetch_multiple_observable_ids (
259+ observed_data , identifiers , value
260260 )
261261 if key .endswith ('_refs' ):
262262 for reference in value :
263- yield from self ._fetch_multiple_observable_ids (
264- observed_data , reference
265- )
263+ if reference not in identifiers :
264+ self ._fetch_multiple_observable_ids (
265+ observed_data , identifiers , reference
266+ )
266267
267268 def _parse_multiple_observable_object_refs (
268269 self , observed_data : ObservedData_v21 ,
@@ -304,13 +305,12 @@ def _parse_multiple_observable_objects(
304305 for object_id in observable_objects .keys ():
305306 if observable_objects [object_id ]['used' ]:
306307 continue
308+ self ._fetch_multiple_observable_ids (
309+ observed_data , identifiers := set (), object_id
310+ )
307311 observables = {
308312 identifier : observable_objects [identifier ]
309- for identifier in set (
310- self ._fetch_multiple_observable_ids (
311- observed_data , object_id
312- )
313- )
313+ for identifier in identifiers
314314 }
315315 if object_id in referenced_ids :
316316 for reference in referenced_ids [object_id ]:
0 commit comments