diff options
| author | Tristan Darricau <tristan.darricau@sensiolabs.com> | 2016-03-25 11:43:05 +0100 |
|---|---|---|
| committer | Tristan Darricau <tristan.darricau@sensiolabs.com> | 2016-03-25 11:43:05 +0100 |
| commit | 6774c5077ddf82eb2f31e92d327ce6905b73c3df (patch) | |
| tree | 09d9b6441d4a8417fa54bd1f1336b7bf31bca882 /phpBB/phpbb | |
| parent | 2168cb7f8e5a54c4676edddfb5804e1441baf179 (diff) | |
| parent | 215fad420f20ba48cda00c7ceedfa31e035ee76f (diff) | |
| download | forums-6774c5077ddf82eb2f31e92d327ce6905b73c3df.tar forums-6774c5077ddf82eb2f31e92d327ce6905b73c3df.tar.gz forums-6774c5077ddf82eb2f31e92d327ce6905b73c3df.tar.bz2 forums-6774c5077ddf82eb2f31e92d327ce6905b73c3df.tar.xz forums-6774c5077ddf82eb2f31e92d327ce6905b73c3df.zip | |
Merge pull request #4214 from marc1706/ticket/14241
[ticket/14241] Prevent empty q&a as a result of improper settings
* marc1706/ticket/14241:
[ticket/14241] Log fatal captcha error to error log
[ticket/14241] Prevent empty q&a as a result of improper settings
Diffstat (limited to 'phpBB/phpbb')
| -rw-r--r-- | phpBB/phpbb/captcha/plugins/qa.php | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/phpBB/phpbb/captcha/plugins/qa.php b/phpBB/phpbb/captcha/plugins/qa.php index 2771369e57..8f2da838c5 100644 --- a/phpBB/phpbb/captcha/plugins/qa.php +++ b/phpBB/phpbb/captcha/plugins/qa.php @@ -100,6 +100,28 @@ class qa $db->sql_freeresult($result); } + // final fallback to any language + if (!sizeof($this->question_ids)) + { + $this->question_lang = ''; + + $sql = 'SELECT q.question_id, q.lang_iso + FROM ' . $this->table_captcha_questions . ' q, ' . $this->table_captcha_answers . ' a + WHERE q.question_id = a.question_id + GROUP BY lang_iso'; + $result = $db->sql_query($sql, 7200); + + while ($row = $db->sql_fetchrow($result)) + { + if (empty($this->question_lang)) + { + $this->question_lang = $row['lang_iso']; + } + $this->question_ids[$row['question_id']] = $row['question_id']; + } + $db->sql_freeresult($result); + } + // okay, if there is a confirm_id, we try to load that confirm's state. If not, we try to find one if (!$this->load_answer() && (!$this->load_confirm_id() || !$this->load_answer())) { @@ -198,10 +220,12 @@ class qa */ function get_template() { - global $template; + global $phpbb_log, $template, $user; - if ($this->is_solved()) + if ($this->is_solved() || empty($this->question_text) || !count($this->question_ids)) { + /** @var \phpbb\log\log_interface $phpbb_log */ + $phpbb_log->add('critical', $user->data['user_id'], $user->ip, 'LOG_ERROR_CAPTCHA', time(), array($user->lang('CONFIRM_QUESTION_MISSING'))); return false; } else @@ -364,13 +388,15 @@ class qa */ function validate() { - global $user; + global $phpbb_log, $user; $error = ''; if (!sizeof($this->question_ids)) { - return false; + /** @var \phpbb\log\log_interface $phpbb_log */ + $phpbb_log->add('critical', $user->data['user_id'], $user->ip, 'LOG_ERROR_CAPTCHA', time(), array($user->lang('CONFIRM_QUESTION_MISSING'))); + return $user->lang('CONFIRM_QUESTION_MISSING'); } if (!$this->confirm_id) |
