test(domain): malware is reported infected even when the file is not a PDF (refs #192)
clamd matches EICAR only at the start of a file, so a %PDF- check ahead of the scan made the infected path unreachable for the EICAR test file. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -113,24 +113,38 @@ public class ProvideDocumentsTests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task A_file_that_is_not_a_pdf_is_refused_without_being_scanned()
|
public async Task A_clean_file_that_is_not_a_pdf_is_refused()
|
||||||
{
|
{
|
||||||
var store = new FakeRegistrationStore();
|
var store = new FakeRegistrationStore();
|
||||||
var registration = Submitted();
|
var registration = Submitted();
|
||||||
store.Seed(registration);
|
store.Seed(registration);
|
||||||
var workflow = new FakeWorkflowClient();
|
var workflow = new FakeWorkflowClient();
|
||||||
var acl = new FakeAclClient();
|
var acl = new FakeAclClient();
|
||||||
var scanner = new FakeDocumentScanner();
|
var handler = new ProvideDocuments(store, workflow, acl, new FakeDocumentScanner());
|
||||||
var handler = new ProvideDocuments(store, workflow, acl, scanner);
|
|
||||||
|
|
||||||
var outcome = await handler.HandleAsync(Command(registration.Id, content: "MZ not a pdf"u8.ToArray()));
|
var outcome = await handler.HandleAsync(Command(registration.Id, content: "MZ not a pdf"u8.ToArray()));
|
||||||
|
|
||||||
Assert.Equal(ProvideDocumentsOutcome.NotAPdf, outcome);
|
Assert.Equal(ProvideDocumentsOutcome.NotAPdf, outcome);
|
||||||
Assert.Null(scanner.Scanned);
|
|
||||||
Assert.Null(acl.StoredDiploma);
|
Assert.Null(acl.StoredDiploma);
|
||||||
Assert.Null(workflow.CompletedDocumentWaitFor);
|
Assert.Null(workflow.CompletedDocumentWaitFor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Malware_is_reported_as_infected_even_when_it_is_not_a_pdf()
|
||||||
|
{
|
||||||
|
// Scan first: clamd matches EICAR (and much real malware) only at the start of a file, so a file
|
||||||
|
// that fails the PDF check must still be scanned, and the citizen told it is infected.
|
||||||
|
var store = new FakeRegistrationStore();
|
||||||
|
var registration = Submitted();
|
||||||
|
store.Seed(registration);
|
||||||
|
var handler = new ProvideDocuments(store, new FakeWorkflowClient(), new FakeAclClient(),
|
||||||
|
new FakeDocumentScanner(ScanVerdict.Infected));
|
||||||
|
|
||||||
|
var outcome = await handler.HandleAsync(Command(registration.Id, content: "X5O!P not a pdf"u8.ToArray()));
|
||||||
|
|
||||||
|
Assert.Equal(ProvideDocumentsOutcome.Infected, outcome);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task A_clean_pdf_is_scanned_before_it_is_stored()
|
public async Task A_clean_pdf_is_scanned_before_it_is_stored()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user