From 5726822c4bc66ff4ab8811a9f3d82e547d77b55f Mon Sep 17 00:00:00 2001 From: albertlast Date: Mon, 10 Aug 2026 06:52:36 +0200 Subject: [PATCH 1/2] Prints the registration errors that carry their own words Refuse a registration for a weak password and the form says "The following errors were detected" above a bullet with nothing in it. Each error is [kind, text, log, args], where the kind is 'lang' for a language key and 'done' for a finished sentence - as the comment directly above the loop says. The loop ignores it and looks every one of them up in Errors. A 'done' error is not a key there, getTxt() returns an empty string for a key it cannot find, and that empty string is the bullet. It is the strength feedback from validatePassword() that reaches this, which is every rejection except 'short'. 2.1 read the kind here. Co-Authored-By: Claude Opus 5 Signed-off-by: albertlast --- Sources/Actions/Register2.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Sources/Actions/Register2.php b/Sources/Actions/Register2.php index a8f44e8098..8ac0da5667 100644 --- a/Sources/Actions/Register2.php +++ b/Sources/Actions/Register2.php @@ -573,7 +573,12 @@ public static function registerMember(array &$reg_options, bool $return_errors = 1 = The text/index. 2 = Whether to log. 3 = sprintf data if necessary. */ - $message = Lang::getTxt($error[1], (array) ($error[3] ?? []), file: 'Errors'); + // A 'done' error carries its own words - the password strength + // feedback and "that name is already in use" are both built as + // sentences rather than keys. Looking them up in Errors finds + // nothing and getTxt() hands back an empty string, which is what + // the registration form was printing: a bullet with no text in it. + $message = ($error[0] ?? 'lang') === 'done' ? $error[1] : Lang::getTxt($error[1], (array) ($error[3] ?? []), file: 'Errors'); // What to do, what to do, what to do. if ($return_errors) { From fd07f70684d6c93d76ee9bdee8ae0a7d5712eafd Mon Sep 17 00:00:00 2001 From: Jon Stovell Date: Sat, 29 Aug 2026 17:19:40 -0600 Subject: [PATCH 2/2] Update Sources/Actions/Register2.php --- Sources/Actions/Register2.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Sources/Actions/Register2.php b/Sources/Actions/Register2.php index 8ac0da5667..9a9f18484f 100644 --- a/Sources/Actions/Register2.php +++ b/Sources/Actions/Register2.php @@ -573,11 +573,6 @@ public static function registerMember(array &$reg_options, bool $return_errors = 1 = The text/index. 2 = Whether to log. 3 = sprintf data if necessary. */ - // A 'done' error carries its own words - the password strength - // feedback and "that name is already in use" are both built as - // sentences rather than keys. Looking them up in Errors finds - // nothing and getTxt() hands back an empty string, which is what - // the registration form was printing: a bullet with no text in it. $message = ($error[0] ?? 'lang') === 'done' ? $error[1] : Lang::getTxt($error[1], (array) ($error[3] ?? []), file: 'Errors'); // What to do, what to do, what to do.