Bug: Assigning null to ?array $identities property without proper handling
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 52/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- php
- Área
- authentication
Línea de trabajo
Empieza en src/Entities/User.php, especialmente en la declaración nullable de $identities cerca de la línea 50 y en las asignaciones alrededor de las líneas 130 y 149. Reproduce el problema recargando todas las identidades y, después, inspecciona la ruta del setter que provoca el TypeError. La tarea está terminada cuando las identidades se recargan sin el error relacionado con null.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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
- Lenguaje dominante
- PHP
- Estrellas
- 426
- Forks
- 144
- Merge medio
- 3 d 14 h
- PR fusionados (30 d)
- 2
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de codeigniter4/shield
-
Dev: Add bot detection for magic linksPosiblemente ocupada @datamweb la tomó hace 312 días. Abiertodev
codeigniter4/shield#1293 · 5 comentarios · 1 asignado ·
-
Bug: Auth.php ErrorsAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
codeigniter4/shield#1270 · 6 comentarios ·
-
dev enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
codeigniter4/shield#1255 · 1 comentario · 1 reacción ·
-
dev github_actions
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
codeigniter4/shield#792 · 3 comentarios · 1 reacción ·
Todos los issues de codeigniter4/shield
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
components-web-app/api-components-bundle#403 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
mollie/PrestaShop#1566 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
components-web-app/docs#193 ·
-
docs: add Python and PHP examples to docs/api.mdPosiblemente ocupada @gaurika-analyst la tomó hoy. Abiertodocumentation good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
djazairdev/wilayas#12 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Deno Runtime is discontinuedAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
endoflife-date/endoflife.date#11314 ·
Los mantenedores suelen responder en 1 día