16P by lifthrasiir 2022-09-14 | favorite | 댓글 3개

JPEG XL은 ISO/IEC 18181로 표준화된 차세대 이미지 파일 포맷입니다. GeekNews에도 한 번 올라온 적이 있네요. https://news.hada.io/topic?id=3788

요즘 브라우저만 빼고 모든 이미지 관련 도구에 지원이 추가되고 있는 모양새인데, 레퍼런스 구현체인 libjxl이 퀄리티가 높아서 그걸 그대로 쓰는 경우가 많습니다. 그런데 libjxl 자체는 C++로 십수만줄 하는 꽤 커다란 소프트웨어라 빌드가 간단하지 않고, libjxl이 먼저 만들어진 뒤에 명세가 만들어져서 명세와 libjxl이 안 맞는 곳도 제법 있습니다(심지어 표준화된 이후에도 이 모양...). 게다가 JPEG XL 인코더를 만드는 건 일부 기능만 지원해도 되어서 쉽지만, 디코더는 모든 기능을 지원해야 해서 한동안 libjxl 말고 픽셀 하나라도 디코딩되는 디코더가 아예 없었습니다.

J40은 그런 상황을 타개해 보고자 + 퇴직 이후 재활 겸 시작했던 프로젝트인데 장장 4개월이 걸렸네요... 현재의 J40은 (Jon Sneyers 씨의 표현을 빌리면) 전체 명세의 80% 정도를 C99로 구현한 상태인데 이렇게 커질 줄 알았으면 처음부터 러스트로 짤 걸 그랬습니다 흑흑. 아무튼 이 프로젝트가 JPEG XL에 관심이 있으신 분의 도움이 되었으면 하는 바람입니다.

https://github.com/lifthrasiir/j40/…

이부분 음수 체크 해야할것 같아요~~

j40__ans_table 함수에서도 sizeof(int16_t) * (size_t) table_size 를 변수에 저장하고 D 배열 접근하기전에 체크 해야 할 거 같아요.

특히 case 2에서 0 <= bias_size <= alpha_size <= table_size <= sizeof(int16_t) * (size_t) table_size 조건을 J40__SHOULD 를 쓸 필요가 있어 보여요.

멋진 프로젝트 잘 봤습니다~

혹시 fuzzer를 돌리셨나요? ㅎㅎㅎ API가 비교적 나중에 결정되었기 때문에 fuzzer를 돌리는 게 늦어서 이제야 돌리고 있는데 아마 예측 가능한 곳에서 많이 터질 겁니다... 참고로 해당 사항은 fuzzing 과정에서 확인해서 곧 수정을 올릴 예정입니다.

우어 멋지네요. 하시는 일 항상 응원합니다!!