diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 22f6f5bd647..cc2a1e25b73 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -5961,6 +5961,7 @@ function email_to_user($user, $from, $subject, $messagetext, $messagehtml = '', 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 { diff --git a/lib/tests/moodlelib_test.php b/lib/tests/moodlelib_test.php index c73a5b352a3..508608269d9 100644 --- a/lib/tests/moodlelib_test.php +++ b/lib/tests/moodlelib_test.php @@ -2859,6 +2859,19 @@ class core_moodlelib_testcase extends advanced_testcase { $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(); } /**