We need to consider a unified API for validation
Mantenedores costumam responder em até 1 dia
@marchc1 já está trabalhando nisso.
Desde 15/10/2025.
Avaliação
Esta issue ainda não foi avaliada.
Descrição
Right now, a lot of things in the engine (Materials, Textures, Panels, etc) do not have a better way to determine if they're valid or not. While we won't get UAF's for having invalid pointers or anything, we will keep around resources that dont need to be kept, which also can lead to unintended behavior.
My previous engines have had something along the lines of this:
public interface IValidatable : IDisposable
{
bool Valid();
}
public static class IValidatableExts
{
public static bool IsValid<T>(this T? object) where T : IValidatable => object == null ? false : object.Valid();
}
This would allow us to have Panel for example implement it as such:
public class Panel() {
bool valid = true;
...
void Remove() {
...
Dispose();
...
}
void Dispose() {
valid = false;
}
bool Valid() => valid;
...
}
The nice thing about the extension-based API here is that T can be nullable, which allows us to run this even on a null object - meaning we don't have to do something like obj != null && obj.IsValid() - this is all valid:
Panel? panel = null;
Assert(!panel.IsValid())
panel = new Button(...);
Assert(panel.IsValid())
panel.Remove();
Assert(!panel.IsValid())
It just deviates from what Source does (ie. Source has PHandles, etc). I just think this is a little nicer given we're working with C#.
- Linguagem predominante
- C#
- Estrelas
- 104
- Forks
- 9
- Merge médio
- 8h 40min
- PRs com merge (30d)
- 110
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
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 SourceDotNET/Source.NET
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 69/100
SourceDotNET/Source.NET#203 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
SourceDotNET/Source.NET#117 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
SourceDotNET/Source.NET#116 ·
Mantenedores costumam responder em até 1 dia
-
Need to consider refactoring the API for concommand autocompleteTalvez livre de novo @marchc1 assumiu há 368 dias e não há nenhum pull request aberto. AbertaEnhancement Performance
SourceDotNET/Source.NET#36 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
Review unsafe code usageTalvez livre de novo @marchc1 assumiu há 377 dias e não há nenhum pull request aberto. AbertaEnhancement
SourceDotNET/Source.NET#18 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
Todas as issues de SourceDotNET/Source.NET
Issues semelhantes
-
Wrong values of Kernel32.FileShare.Delete and Kernel32.FileAttributes.PosixSemanticsTalvez já em andamento @ElectLive assumiu hoje. Abertabug good first issue help wanted
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 83/100
ForNeVeR/TruePath#241 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 66/100
files-community/Files#19047 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
area:frontend bug FE hotspot:css P3
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
klasolsson81/jobbliggaren#2175 ·
Mantenedores costumam responder em até 1 dia
-
needs-triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 71/100
elsa-workflows/elsa-foundation#2965 ·
Mantenedores costumam responder em até 1 dia