J40: decodificador JPEG XL
(github.com/lifthrasiir)JPEG XL é um formato de arquivo de imagem de próxima geração padronizado como ISO/IEC 18181. Já apareceu uma vez no GeekNews também. https://pt.news.hada.io/topic?id=3788
Ultimamente, parece que o suporte está sendo adicionado a todas as ferramentas relacionadas a imagens, exceto os navegadores, e como a implementação de referência, libjxl, tem alta qualidade, em muitos casos ela é usada diretamente. No entanto, o próprio libjxl é um software bastante grande, com centenas de milhares de linhas em C++, então a compilação não é simples; além disso, como o libjxl foi criado antes da especificação, há vários pontos em que a especificação e o libjxl não batem (e isso mesmo depois da padronização...). Além disso, criar um codificador JPEG XL é relativamente fácil porque basta suportar apenas parte dos recursos, mas um decodificador precisa suportar todos os recursos, então por um bom tempo simplesmente não existia nenhum decodificador além do libjxl que sequer decodificasse um único pixel.
O J40 é um projeto que comecei para tentar superar essa situação + como uma espécie de reabilitação depois da aposentadoria, e acabou levando longos 4 meses... O J40 atual implementa em C99 cerca de 80% da especificação completa (para usar a expressão do Jon Sneyers), mas se eu soubesse que ia ficar tão grande, teria escrito em Rust desde o começo, aff. Enfim, espero que este projeto possa ser útil para quem tem interesse em JPEG XL.
3 comentários
https://github.com/lifthrasiir/j40/…
Acho que precisa verificar valor negativo nesta parte~~
Na função
j40__ans_table, também parece que seria bom armazenarsizeof(int16_t) * (size_t) table_sizeem uma variável e verificar antes de acessar o arrayD.Especialmente no case 2, parece necessário usar
J40__SHOULDpara a condição0 <= bias_size <= alpha_size <= table_size <= sizeof(int16_t) * (size_t) table_size.Gostei muito do projeto~
Vocês chegaram a rodar um fuzzer? kkkk Como a API foi definida relativamente mais tarde, demoramos para rodar o fuzzer e só agora estamos fazendo isso, então provavelmente vai quebrar bastante em pontos previsíveis... Só para constar, isso foi identificado durante o processo de fuzzing e em breve vamos enviar uma correção.
Uau, que incrível. Estou sempre torcendo pelo seu trabalho!!