From 022b58f986c991d5dd0ba69fa5523026c2422331 Mon Sep 17 00:00:00 2001 From: rxu Date: Sat, 28 Nov 2020 17:52:27 +0700 Subject: [PATCH] [ticket/16582] Fix SQL error on registration with Numbers CPF with no default PHPBB3-16582 --- phpBB/phpbb/profilefields/manager.php | 5 ++- tests/functional/registration_test.php | 61 ++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/phpBB/phpbb/profilefields/manager.php b/phpBB/phpbb/profilefields/manager.php index 8af2fe12ad..bf7096ca42 100644 --- a/phpBB/phpbb/profilefields/manager.php +++ b/phpBB/phpbb/profilefields/manager.php @@ -259,7 +259,10 @@ class manager * Replace Emoji and other 4bit UTF-8 chars not allowed by MySQL * with their Numeric Character Reference's Hexadecimal notation. */ - $cp_data['pf_' . $row['field_ident']] = utf8_encode_ucr($cp_data['pf_' . $row['field_ident']]); + if (is_string($cp_data['pf_' . $row['field_ident']])) + { + $cp_data['pf_' . $row['field_ident']] = utf8_encode_ucr($cp_data['pf_' . $row['field_ident']]); + } $check_value = $cp_data['pf_' . $row['field_ident']]; diff --git a/tests/functional/registration_test.php b/tests/functional/registration_test.php index 48982edc8c..9b77feaa86 100644 --- a/tests/functional/registration_test.php +++ b/tests/functional/registration_test.php @@ -118,4 +118,65 @@ class phpbb_functional_registration_test extends phpbb_functional_test_case $form['config[coppa_enable]']->setValue('0'); $crawler = self::submit($form); } + + /** + * @depends test_disable_captcha_on_registration + */ + public function test_register_new_account_with_cpf_numbers() + { + $this->add_lang(['ucp', 'acp/profile']); + + // Create "Numbers" type CPF but don't set its default value + $this->login(); + $this->admin_login(); + + $crawler = self::request('GET', "adm/index.php?i=acp_profile&mode=profile&sid={$this->sid}"); + $form = $crawler->selectButton('submit')->form([ // Create new field + 'field_type' => 'profilefields.type.int', + ]); + $crawler = self::submit($form); + + $this->assertContainsLang('STEP_1_TITLE_CREATE', $this->get_content()); + $this->assertStringContainsString('Numbers', $crawler->filter('dl > dd > strong')->text()); + + $form = $crawler->selectButton('next')->form([ // Go to Profile type specific options + 'field_ident' => 'Numbers', + 'lang_name' => 'Numbers CPF', + ]); + $form['field_show_on_reg']->tick(); + $crawler = self::submit($form); + + $this->assertContainsLang('STEP_2_TITLE_CREATE', $this->get_content()); + + $form = $crawler->selectButton('Save')->form(); // Save CPF + self::submit($form); + $this->assertContainsLang('ADDED_PROFILE_FIELD', $this->get_content()); + + $this->logout(); + + // Get into registration process + // Check that we can't skip + self::request('GET', 'ucp.php?mode=register&agreed=1'); + $this->assertContainsLang('AGREE', $this->get_content()); + + $crawler = self::request('GET', 'ucp.php?mode=register'); + $this->assertContainsLang('REGISTRATION', $crawler->filter('div.content h2')->text()); + + $form = $crawler->selectButton('I agree to these terms')->form(); + $crawler = self::submit($form); + + // Check if Numbers CPF displayed on registration + $this->assertStringContainsString('Numbers CPF', $crawler->filter('label[for="pf_numbers"]')->text()); + + $form = $crawler->selectButton('Submit')->form(array( + 'username' => 'user-reg-test1', + 'email' => 'user-reg-test1@phpbb.com', + 'new_password' => 'user-reg-testuser-reg-test1', + 'password_confirm' => 'user-reg-testuser-reg-test1', + )); + $form['tz']->select('Europe/Berlin'); + $crawler = self::submit($form); + + $this->assertContainsLang('ACCOUNT_ADDED', $crawler->filter('#message')->text()); + } }