Skip to content

Commit be74945

Browse files
committed
feat: implement get_permission_confusion
1 parent d18cb2e commit be74945

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

db.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,44 @@ def get_specific_child(self, parent_rowid: int, name: str) -> int | None:
151151
return None
152152
return row[0]
153153

154+
def _get_permission_confusion_count(
155+
self,
156+
case_id: int,
157+
subject_cid: int,
158+
eval_case_id: int,
159+
reference_result: int,
160+
medusa_result: int,
161+
) -> int:
162+
ret = self.cur.execute(
163+
''' SELECT COUNT(*)
164+
FROM accesses
165+
LEFT JOIN results ON accesses.ROWID = results.access_id
166+
LEFT JOIN medusa_results ON results.rowid = medusa_results.result_id
167+
WHERE case_id = ? AND subject_cid = ? AND eval_case_id = ? AND reference_result = ? AND medusa_result = ?''',
168+
(
169+
case_id,
170+
subject_cid,
171+
eval_case_id,
172+
reference_result,
173+
medusa_result,
174+
),
175+
)
176+
return ret.fetchone()[0]
177+
178+
def get_permission_confusion(
179+
self, case: str, context: str, eval_case: str
180+
) -> tuple[int, int, int, int]:
181+
case_id = self.get_case_id(case)
182+
subject_cid = self.get_context_id(context)
183+
eval_case_id = self.get_eval_case(eval_case)
184+
results = ((1, 1), (0, 0), (0, 1), (1, 0))
185+
return [
186+
self._get_permission_confusion_count(
187+
case_id, subject_cid, eval_case_id, *result
188+
)
189+
for result in results
190+
]
191+
154192

155193
class DatabaseWriter(DatabaseCommon):
156194
"""Database with read-write support."""

0 commit comments

Comments
 (0)