diff options
author | Marc Alexander <admin@m-a-styles.de> | 2014-06-09 15:55:04 +0200 |
---|---|---|
committer | Marc Alexander <admin@m-a-styles.de> | 2014-06-09 17:48:06 +0200 |
commit | 89f70673779f1908c8f000c5c053bb377e253254 (patch) | |
tree | d088e38d448868995aa411daaaa8120bac5cb1d1 | |
parent | 0c5af536f1de55b6ee30ab9f193b6ea7637ac5b1 (diff) | |
download | forums-89f70673779f1908c8f000c5c053bb377e253254.tar forums-89f70673779f1908c8f000c5c053bb377e253254.tar.gz forums-89f70673779f1908c8f000c5c053bb377e253254.tar.bz2 forums-89f70673779f1908c8f000c5c053bb377e253254.tar.xz forums-89f70673779f1908c8f000c5c053bb377e253254.zip |
[ticket/11711] Inform user of unsupported characters while posting
PHPBB3-11711
-rw-r--r-- | phpBB/includes/message_parser.php | 13 | ||||
-rw-r--r-- | phpBB/language/en/posting.php | 1 | ||||
-rw-r--r-- | tests/functional/posting_test.php | 38 |
3 files changed, 52 insertions, 0 deletions
diff --git a/phpBB/includes/message_parser.php b/phpBB/includes/message_parser.php index 6d3907880e..eed892986e 100644 --- a/phpBB/includes/message_parser.php +++ b/phpBB/includes/message_parser.php @@ -1194,6 +1194,19 @@ class parse_message extends bbcode_firstpass } } + // Check for out-of-bounds characters that are currently + // not supported by utf8_bin + if (preg_match_all('/[\x{10000}-\x{10FFFF}]/u', $this->message, $matches)) + { + $character_list = ''; + foreach ($matches[0] as $cur_match) + { + $character_list .= $cur_match . '<br />'; + } + $this->warn_msg[] = $user->lang('UNSUPPORTED_CHARACTERS', $character_list); + return (!$update_this_message) ? $return_message : $this->warn_msg; + } + // Check for "empty" message. We do not check here for maximum length, because bbcode, smilies, etc. can add to the length. // The maximum length check happened before any parsings. if ($mode === 'post' && utf8_clean_string($this->message) === '') diff --git a/phpBB/language/en/posting.php b/phpBB/language/en/posting.php index 20377287fd..ac08b27943 100644 --- a/phpBB/language/en/posting.php +++ b/phpBB/language/en/posting.php @@ -256,6 +256,7 @@ $lang = array_merge($lang, array( 'UNAUTHORISED_BBCODE' => 'You cannot use certain BBCodes: %s.', 'UNGLOBALISE_EXPLAIN' => 'To switch this topic back from being global to a normal topic, you need to select the forum you wish this topic to be displayed.', + 'UNSUPPORTED_CHARACTERS' => 'Your message contains the following unsupported characters:<br />%s', 'UPDATE_COMMENT' => 'Update comment', 'URL_INVALID' => 'The URL you specified is invalid.', 'URL_NOT_FOUND' => 'The file specified could not be found.', diff --git a/tests/functional/posting_test.php b/tests/functional/posting_test.php index 2611ef7bf1..430a6496a0 100644 --- a/tests/functional/posting_test.php +++ b/tests/functional/posting_test.php @@ -36,4 +36,42 @@ class phpbb_functional_posting_test extends phpbb_functional_test_case $crawler = self::request('GET', "posting.php?mode=quote&f=2&t={$post2['topic_id']}&p={$post2['post_id']}&sid={$this->sid}"); $this->assertContains('This is a test post posted by the testing framework.', $crawler->filter('html')->text()); } + + public function test_unsupported_characters() + { + $this->login(); + + $this->add_lang('posting'); + + $crawler = self::request('GET', "posting.php?mode=reply&f=2&t=1&sid={$this->sid}"); + + $form = $crawler->selectButton('Submit')->form(); + + $hidden_fields = array( + $crawler->filter('[type="hidden"]')->each(function ($node, $i) { + return array('name' => $node->attr('name'), 'value' => $node->attr('value')); + }), + ); + + foreach ($hidden_fields as $fields) + { + foreach($fields as $field) + { + $form_data[$field['name']] = $field['value']; + } + } + + // Bypass time restriction that said that if the lastclick time (i.e. time when the form was opened) + // is not at least 2 seconds before submission, cancel the form + $form_data['lastclick'] = 0; + + $form_data += array( + 'subject' => 'Unsupported characters', + 'message' => 'This is a test with these weird characters: 👅👅👅', + 'post' => true, + ); + $crawler = self::request('POST', "posting.php?mode=reply&f=2&t=1&sid={$this->sid}", $form_data); + + $this->assertContains('Your message contains the following unsupported characters', $crawler->text()); + } } |