Bug: Assigning null to ?array $identities property without proper handling
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 52/100
- Issue-Typ
- Bug
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Veraltet
- Tech-Stack
- php
- Bereich
- authentication
Rechercherichtung
Beginnen Sie in src/Entities/User.php, insbesondere bei der Deklaration von $identities, die um Zeile 50 nullable ist, und den Zuweisungen um die Zeilen 130 und 149. Reproduzieren Sie das Problem, indem Sie alle Identitäten neu laden, und untersuchen Sie anschließend den Setter-Pfad, der den TypeError auslöst. Fertig ist die Aufgabe, wenn die Identitäten ohne den Null-bezogenen Fehler neu geladen werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
PHP Version
8.2.7
CodeIgniter4 Version
4.6.3
Shield Version
1.2.0
Which operating systems have you tested for this bug?
Windows
Which server did you use?
cli-server (PHP built-in webserver)
Database
mysqlite(memory unittest)
Did you customize Shield?
yes:
class User extends \CodeIgniter\Shield\Entities\User
.
.
.
public function saveUsernameIdentity(): bool
{
if (empty($this->username) && empty($this->password) && empty($this->password_hash)) {
return true;
}
/** @var UserIdentityModel $identityModel */
$identityModel = model(UserIdentityModel::class);
$identity = $this->getIdentity('username_password');
if ($identity === null && !empty($this->username)) {
$this->identities = null;
$this->createUsernameIdentity( [
'username' => $this->username,
'password' => '',
]);
$identity = $this->getUsernameIdentity();
}
if ($identity !== null) {
if (!empty($this->username)) {
$identity->secret = $this->username;
}
if (!empty($this->password)) {
$identity->secret2 = service('passwords')->hash($this->password);
}
if (!empty($this->password_hash) && empty($this->password)) {
$identity->secret2 = $this->password_hash;
}
try {
$identityModel->save($identity);
} catch (\CodeIgniter\Database\Exceptions\DataException $e) {
$messages = [
lang('Database.emptyDataset', ['insert']),
lang('Database.emptyDataset', ['update']),
];
if (in_array($e->getMessage(), $messages, true)) {
return true;
}
throw $e;
}
}
return true;
}
What happened?
the $identities property is correctly declared as nullable array:
https://github.com/codeigniter4/shield/blob/d07c0f9442dd0712b3fa39bfba677838ff1b8e26/src/Entities/User.php#L50
However, in several places, we directly assign null like these:
TypeError: CodeIgniter\Shield\Entities\User::setIdentities(): Argument 1 ($identities) must be of type array, null given,
Steps to Reproduce
try to reload all identities
Expected Output
reload identities without error
Anything else?
No response
- Vorherrschende Sprache
- PHP
- Sterne
- 427
- Forks
- 143
- Ø Merge
- 3 T. 13 Std.
- Gemergte PRs (30 T.)
- 5
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus codeigniter4/shield
-
Dev: Add bot detection for magic linksEvtl. vergeben @datamweb hat das vor 323 Tagen übernommen. Offendev
codeigniter4/shield#1293 · 5 Kommentare · 1 zugewiesene Person ·
-
Bug: Auth.php ErrorsOffenbug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 35/100
codeigniter4/shield#1270 · 6 Kommentare ·
-
dev enhancement
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
codeigniter4/shield#1255 · 1 Kommentar · 1 Reaktion ·
-
dev github_actions
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
codeigniter4/shield#792 · 3 Kommentare · 1 Reaktion ·
Alle Issues in codeigniter4/shield
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 79/100
PHP-CS-Fixer/PHP-CS-Fixer#9899 ·
Maintainer antworten meist innerhalb von 1 Tag
-
needs-triage Platform(Default)
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 2 Tagen
-
sync-en
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
Maintainer antworten meist innerhalb von 1 Tag
-
[Sync EN] Document Error thrown by shm_* functions on a detached segment (#5975)Evtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offensync-en
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 3 Tagen
-
Перевод устарел
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100