Bug: Assigning null to ?array $identities property without proper handling
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 52/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- php
- Domínio
- authentication
Direção de pesquisa
Comece em src/Entities/User.php, especialmente na declaração nullable de $identities próxima à linha 50 e nas atribuições ao redor das linhas 130 e 149. Reproduza o problema recarregando todas as identidades e, em seguida, inspecione o caminho do setter que causa o TypeError. Está concluído quando as identidades forem recarregadas sem o erro relacionado a null.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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
- Linguagem predominante
- PHP
- Estrelas
- 427
- Forks
- 143
- Merge médio
- 3d 13h
- PRs com merge (30d)
- 5
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de codeigniter4/shield
-
Dev: Add bot detection for magic linksTalvez já em andamento @datamweb assumiu há 319 dias. Abertadev
codeigniter4/shield#1293 · 5 comentários · 1 responsável ·
-
Bug: Auth.php ErrorsAbertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 35/100
codeigniter4/shield#1270 · 6 comentários ·
-
dev enhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
codeigniter4/shield#1255 · 1 comentário · 1 reação ·
-
dev github_actions
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
codeigniter4/shield#792 · 3 comentários · 1 reação ·
Todas as issues de codeigniter4/shield
Issues semelhantes
-
PHP workflow streaming requests buffer the full SSE responseTalvez já em andamento @Winoren assumiu hoje. Abertareview: medium
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
langgenius/dify#44270 · 1 comentário · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
bug customer-reported
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
MagnaCapax/PMSS#1085 ·
Mantenedores costumam responder em até 5 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 83/100
nunomaduro/collision#375 ·
-
enhancement good first issue hacktoberfest help wanted
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
thetheago/laravel-seeder-versioning#19 ·
Mantenedores costumam responder em até 1 dia