Skip to content

Commit cd60e81

Browse files
committed
Prevent access to missing metadata fields
Delegations are optional. Add checks to avoid accessing 'Delegations' object's members if its value is None. Signed-off-by: Teodora Sechkova <[email protected]>
1 parent fa6a798 commit cd60e81

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed

tuf/client_rework/metadata_wrapper.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -158,20 +158,26 @@ def keys(self, role):
158158
TODO
159159
"""
160160
keys = []
161-
for delegation in self._meta.signed.delegations.roles:
162-
if delegation.name == role:
163-
for keyid in delegation.keyids:
164-
key_metadata = self._meta.signed.delegations.keys[keyid]
165-
key, dummy = format_metadata_to_key(key_metadata.to_dict())
166-
keys.append(key)
167-
return keys
161+
if self._meta.signed.delegations is not None:
162+
for delegation in self._meta.signed.delegations.roles:
163+
if delegation.name == role:
164+
for keyid in delegation.keyids:
165+
key_metadata = self._meta.signed.delegations.keys[keyid]
166+
key, dummy = format_metadata_to_key(
167+
key_metadata.to_dict()
168+
)
169+
keys.append(key)
170+
return keys
171+
172+
return keys
168173

169174
def threshold(self, role):
170175
"""
171176
TODO
172177
"""
173-
for delegation in self._meta.signed.delegations.roles:
174-
if delegation.name == role:
175-
return delegation.threshold
178+
if self._meta.signed.delegations is not None:
179+
for delegation in self._meta.signed.delegations.roles:
180+
if delegation.name == role:
181+
return delegation.threshold
176182

177183
return None

tuf/client_rework/updater_rework.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -557,8 +557,9 @@ def _preorder_depth_first_walk(self, target_filepath) -> Dict:
557557

558558
# And also decrement number of visited roles.
559559
number_of_delegations -= 1
560-
delegations = role_metadata.delegations
561-
child_roles = delegations.roles
560+
child_roles = []
561+
if role_metadata.delegations is not None:
562+
child_roles = role_metadata.delegations.roles
562563

563564
if target is None:
564565

0 commit comments

Comments
 (0)