Skip to content

Commit 6be1166

Browse files
committed
Detect changed testcases based on hash
The page shows a warning ```The problem's testcases have changed since this judging has been performed. We recommend rejudging the whole problem.``` but this warning does not cover all possible changes in the testcases (e.g. changing input / output files does not trigger this warning). Make this test more rigor by comparing the hashes.
1 parent b86c695 commit 6be1166

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

webapp/src/Controller/Jury/SubmissionController.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ public function viewAction(
377377
$runsOutstanding = false;
378378
$runs = [];
379379
$runsOutput = [];
380-
$sameTestcaseIds = true;
380+
$sameTestcaseHashes = true;
381381
if ($selectedJudging || $externalJudgement) {
382382
$queryBuilder = $this->em->createQueryBuilder()
383383
->from(Testcase::class, 't')
@@ -414,25 +414,25 @@ public function viewAction(
414414
->getQuery()
415415
->getResult();
416416

417-
$judgingRunTestcaseIdsInOrder = $this->em->createQueryBuilder()
417+
$judgingRunTestcaseHashesInOrder = $this->em->createQueryBuilder()
418418
->from(JudgeTask::class, 'jt')
419-
->select('jt.testcase_id')
419+
->select('jt.testcase_hash')
420420
->andWhere('jt.jobid = :judging')
421421
->setParameter('judging', $selectedJudging)
422422
->orderBy('jt.judgetaskid')
423423
->getQuery()
424424
->getScalarResult();
425425

426426
$cnt = 0;
427-
if (count($judgingRunTestcaseIdsInOrder) !== count($runResults)) {
428-
$sameTestcaseIds = false;
427+
if (count($judgingRunTestcaseHashesInOrder) !== count($runResults)) {
428+
$sameTestcaseHashes = false;
429429
}
430430
foreach ($runResults as $runResult) {
431431
/** @var Testcase $testcase */
432432
$testcase = $runResult[0];
433-
if (isset($judgingRunTestcaseIdsInOrder[$cnt])) {
434-
if ($testcase->getTestcaseid() != $judgingRunTestcaseIdsInOrder[$cnt]['testcase_id']) {
435-
$sameTestcaseIds = false;
433+
if (isset($judgingRunTestcaseHashesInOrder[$cnt])) {
434+
if ($testcase->getTestcasehash() != $judgingRunTestcaseHashesInOrder[$cnt]['testcase_hash']) {
435+
$sameTestcaseHashes = false;
436436
}
437437
}
438438
$cnt++;
@@ -571,7 +571,7 @@ public function viewAction(
571571
'runs' => $runs,
572572
'runsOutstanding' => $runsOutstanding,
573573
'judgehosts' => $judgehosts,
574-
'sameTestcaseIds' => $sameTestcaseIds,
574+
'sameTestcaseHashes' => $sameTestcaseHashes,
575575
'externalRuns' => $externalRuns,
576576
'runsOutput' => $runsOutput,
577577
'lastRuns' => $lastRuns,
@@ -710,7 +710,7 @@ public function requestOutput(Request $request, Judging $jid, JudgingRun $jrid):
710710
->setJobId($jid->getJudgingid())
711711
->setUuid($jid->getUuid())
712712
->setTestcaseId($testcase->getTestcaseid())
713-
->setTestcaseHash($testcase->getMd5sumInput() . '_' . $testcase->getMd5sumOutput());
713+
->setTestcaseHash($testcase->getTestcaseHash());
714714
$this->em->persist($judgeTask);
715715
$this->em->flush();
716716
return $this->redirectToLocalReferrer($this->router, $request, $this->generateUrl('jury_submission', [

webapp/templates/jury/submission.html.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@
279279
</div>
280280
{% endif %}
281281
282-
{% if not sameTestcaseIds and selectedJudging is not null and selectedJudging.result is not empty %}
282+
{% if not sameTestcaseHashes and selectedJudging is not null and selectedJudging.result is not empty %}
283283
<div class="alert alert-danger">The problem's testcases have changed since this judging has been performed. We recommend rejudging the whole problem.</div>
284284
{% endif %}
285285

0 commit comments

Comments
 (0)