if ($attachment && $attachname) {
if (preg_match( "~\\.\\.~" , $attachment )) {
// Security check for ".." in dir path.
+ $supportuser = core_user::get_support_user();
$temprecipients[] = array($supportuser->email, fullname($supportuser, true));
$mail->addStringAttachment('Error in attachment. User attempted to attach a filename with a unsafe name.', 'error.txt', '8bit', 'text/plain');
} else {
$this->assertNotEquals($CFG->noreplyaddress, $result[0]->from);
$this->assertEquals($CFG->noreplyaddress, $result[1]->from);
$sink->close();
+
+ // Try to send an unsafe attachment, we should see an error message in the eventual mail body.
+ $attachment = '../test.txt';
+ $attachname = 'txt';
+
+ $sink = $this->redirectEmails();
+ email_to_user($user1, $user2, $subject, $messagetext, '', $attachment, $attachname);
+ $this->assertSame(1, $sink->count());
+ $result = $sink->get_messages();
+ $this->assertCount(1, $result);
+ $this->assertContains('error.txt', $result[0]->body);
+ $this->assertContains('Error in attachment. User attempted to attach a filename with a unsafe name.', $result[0]->body);
+ $sink->close();
}
/**