Fuzz introspector: color_encoding_fuzzer
For issues and ideas: https://github.com/ossf/fuzz-introspector/issues

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
35 35 6 :

['float const& std::__1::min (float const&, float const&)', 'jpegli::N_SSE4::DitherRow(jpeg_decompress_struct*, float*, int, unsigned long, unsigned long)', 'jpegli::N_SSE4::LimitError(float)', 'jpegli::LookupColorIndex(jpeg_decompress_struct*, unsigned char*)', 'round(float)', 'float const& std::__1::max (float const&, float const&)']

35 51 jpegli::N_SSE4::WriteToOutput(jpeg_decompress_struct*,float*restrict*,unsignedlong,unsignedlong,unsignedlong,unsignedchar*) call site: 00000 /src/libjxl/lib/jpegli/render.cc:203
35 35 6 :

['float const& std::__1::min (float const&, float const&)', 'jpegli::LookupColorIndex(jpeg_decompress_struct*, unsigned char*)', 'round(float)', 'float const& std::__1::max (float const&, float const&)', 'jpegli::N_SSE2::DitherRow(jpeg_decompress_struct*, float*, int, unsigned long, unsigned long)', 'jpegli::N_SSE2::LimitError(float)']

35 51 jpegli::N_SSE2::WriteToOutput(jpeg_decompress_struct*,float*restrict*,unsignedlong,unsignedlong,unsignedlong,unsignedchar*) call site: 00000 /src/libjxl/lib/jpegli/render.cc:203
35 35 6 :

['float const& std::__1::min (float const&, float const&)', 'jpegli::LookupColorIndex(jpeg_decompress_struct*, unsigned char*)', 'round(float)', 'jpegli::N_AVX2::DitherRow(jpeg_decompress_struct*, float*, int, unsigned long, unsigned long)', 'jpegli::N_AVX2::LimitError(float)', 'float const& std::__1::max (float const&, float const&)']

35 48 jpegli::N_AVX2::WriteToOutput(jpeg_decompress_struct*,float*restrict*,unsignedlong,unsignedlong,unsignedlong,unsignedchar*) call site: 00000 /src/libjxl/lib/jpegli/render.cc:203
0 4 1 :

['jpegli::FormatString(char*, char const*, ...)']

0 12 jpegli::(anonymousnamespace)::FreePool(jpeg_common_struct*,int) call site: 00000 /src/libjxl/lib/jpegli/memory_manager.cc:138
0 4 1 :

['jpegli::FormatString(char*, char const*, ...)']

0 9 jpegli::PrepareForScan(jpeg_decompress_struct*) call site: 00000 /src/libjxl/lib/jpegli/decode.cc:266
0 4 1 :

['jpegli::FormatString(char*, char const*, ...)']

0 4 jpegli_consume_input call site: 00000 /src/libjxl/lib/jpegli/decode.cc:612
0 0 None 783 1436 jpegli_start_decompress call site: 00000 /src/libjxl/lib/jpegli/decode.cc:759
0 0 None 6 504 jpegli::ConsumeInput(jpeg_decompress_struct*) call site: 00000 /src/libjxl/lib/jpegli/decode.cc:342
0 0 None 6 504 jpegli::ConsumeInput(jpeg_decompress_struct*) call site: 00000 /src/libjxl/lib/jpegli/decode.cc:366
0 0 None 5 7 hwy::(anonymousnamespace)::x86::DetectTargets() call site: 00000 /src/libjxl/third_party/highway/hwy/targets.cc:269
0 0 None 5 7 hwy::(anonymousnamespace)::x86::DetectTargets() call site: 00000 /src/libjxl/third_party/highway/hwy/targets.cc:272
0 0 None 0 628 jpegli_read_scanlines call site: 00000 /src/libjxl/lib/jpegli/decode.cc:852

Fuzzer calltree

0 LLVMFuzzerTestOneInput [function] [call site] 00000
1 jpegxl::tools::TestOneInput(unsigned char const*, unsigned long) [function] [call site] 00001
2 jxl::ParseDescription(std::__1::basic_string , std::__1::allocator > const&, JxlColorEncoding*) [function] [call site] 00002
3 jxl::(anonymous namespace)::Tokenizer::Tokenizer(std::__1::basic_string , std::__1::allocator > const*, char) [function] [call site] 00003
3 jxl::(anonymous namespace)::ParseColorSpace(jxl::(anonymous namespace)::Tokenizer*, JxlColorEncoding*) [function] [call site] 00004
4 jxl::(anonymous namespace)::Tokenizer::Next(std::__1::basic_string , std::__1::allocator >*) [function] [call site] 00005
5 jxl::Status::Status(jxl::StatusCode) [function] [call site] 00006
5 jxl::Status::Status(bool) [function] [call site] 00007
4 jxl::Status::operator bool() const [function] [call site] 00008
4 jxl::Status jxl::(anonymous namespace)::ParseEnum (std::__1::basic_string , std::__1::allocator > const&, jxl::(anonymous namespace)::EnumName const*, unsigned long, JxlColorSpace*) [function] [call site] 00009
5 jxl::Status::Status(bool) [function] [call site] 00010
4 jxl::Status::operator bool() const [function] [call site] 00011
4 jxl::Status::Status(bool) [function] [call site] 00012
4 jxl::Status::Status(jxl::StatusCode) [function] [call site] 00013
3 jxl::Status::operator bool() const [function] [call site] 00014
3 jxl::(anonymous namespace)::ParseWhitePoint(jxl::(anonymous namespace)::Tokenizer*, JxlColorEncoding*) [function] [call site] 00015
4 jxl::Status::Status(bool) [function] [call site] 00016
4 jxl::(anonymous namespace)::Tokenizer::Next(std::__1::basic_string , std::__1::allocator >*) [function] [call site] 00017
4 jxl::Status::operator bool() const [function] [call site] 00018
4 jxl::Status jxl::(anonymous namespace)::ParseEnum (std::__1::basic_string , std::__1::allocator > const&, jxl::(anonymous namespace)::EnumName const*, unsigned long, JxlWhitePoint*) [function] [call site] 00019
4 jxl::Status::operator bool() const [function] [call site] 00020
4 jxl::(anonymous namespace)::Tokenizer::Tokenizer(std::__1::basic_string , std::__1::allocator > const*, char) [function] [call site] 00021
4 jxl::(anonymous namespace)::ParseDouble(jxl::(anonymous namespace)::Tokenizer*, double*) [function] [call site] 00022
5 jxl::(anonymous namespace)::Tokenizer::Next(std::__1::basic_string , std::__1::allocator >*) [function] [call site] 00023
5 jxl::Status::operator bool() const [function] [call site] 00024
5 jxl::(anonymous namespace)::ParseDouble(std::__1::basic_string , std::__1::allocator > const&, double*) [function] [call site] 00025
6 __errno_location [call site] 00026
6 strtod [call site] 00027
6 jxl::Status::Status(jxl::StatusCode) [function] [call site] 00028
6 _Z5isnanUa9enable_ifILb1EEd [function] [call site] 00029
7 bool __libcpp_isnan (double) [function] [call site] 00030
6 jxl::Status::Status(jxl::StatusCode) [function] [call site] 00031
6 jxl::Status::Status(jxl::StatusCode) [function] [call site] 00032
6 jxl::Status::Status(bool) [function] [call site] 00033
4 jxl::Status::operator bool() const [function] [call site] 00034
4 jxl::(anonymous namespace)::ParseDouble(jxl::(anonymous namespace)::Tokenizer*, double*) [function] [call site] 00035
4 jxl::Status::operator bool() const [function] [call site] 00036
4 jxl::Status::Status(bool) [function] [call site] 00037
3 jxl::Status::operator bool() const [function] [call site] 00038
3 jxl::(anonymous namespace)::ParsePrimaries(jxl::(anonymous namespace)::Tokenizer*, JxlColorEncoding*) [function] [call site] 00039
4 jxl::Status::Status(bool) [function] [call site] 00040
4 jxl::(anonymous namespace)::Tokenizer::Next(std::__1::basic_string , std::__1::allocator >*) [function] [call site] 00041
4 jxl::Status::operator bool() const [function] [call site] 00042
4 jxl::Status jxl::(anonymous namespace)::ParseEnum (std::__1::basic_string , std::__1::allocator > const&, jxl::(anonymous namespace)::EnumName const*, unsigned long, JxlPrimaries*) [function] [call site] 00043
4 jxl::Status::operator bool() const [function] [call site] 00044
4 jxl::(anonymous namespace)::Tokenizer::Tokenizer(std::__1::basic_string , std::__1::allocator > const*, char) [function] [call site] 00045
4 jxl::(anonymous namespace)::ParseDouble(jxl::(anonymous namespace)::Tokenizer*, double*) [function] [call site] 00046
4 jxl::Status::operator bool() const [function] [call site] 00047
4 jxl::(anonymous namespace)::ParseDouble(jxl::(anonymous namespace)::Tokenizer*, double*) [function] [call site] 00048
4 jxl::Status::operator bool() const [function] [call site] 00049
4 jxl::(anonymous namespace)::ParseDouble(jxl::(anonymous namespace)::Tokenizer*, double*) [function] [call site] 00050
4 jxl::Status::operator bool() const [function] [call site] 00051
4 jxl::(anonymous namespace)::ParseDouble(jxl::(anonymous namespace)::Tokenizer*, double*) [function] [call site] 00052
4 jxl::Status::operator bool() const [function] [call site] 00053
4 jxl::(anonymous namespace)::ParseDouble(jxl::(anonymous namespace)::Tokenizer*, double*) [function] [call site] 00054
4 jxl::Status::operator bool() const [function] [call site] 00055
4 jxl::(anonymous namespace)::ParseDouble(jxl::(anonymous namespace)::Tokenizer*, double*) [function] [call site] 00056
4 jxl::Status::operator bool() const [function] [call site] 00057
4 jxl::Status::Status(jxl::StatusCode) [function] [call site] 00058
3 jxl::Status::operator bool() const [function] [call site] 00059
3 jxl::(anonymous namespace)::ParseRenderingIntent(jxl::(anonymous namespace)::Tokenizer*, JxlColorEncoding*) [function] [call site] 00060
4 jxl::(anonymous namespace)::Tokenizer::Next(std::__1::basic_string , std::__1::allocator >*) [function] [call site] 00061
4 jxl::Status::operator bool() const [function] [call site] 00062
4 jxl::Status jxl::(anonymous namespace)::ParseEnum (std::__1::basic_string , std::__1::allocator > const&, jxl::(anonymous namespace)::EnumName const*, unsigned long, JxlRenderingIntent*) [function] [call site] 00063
4 jxl::Status::operator bool() const [function] [call site] 00064
4 jxl::Status::Status(jxl::StatusCode) [function] [call site] 00065
3 jxl::Status::operator bool() const [function] [call site] 00066
3 jxl::(anonymous namespace)::ParseTransferFunction(jxl::(anonymous namespace)::Tokenizer*, JxlColorEncoding*) [function] [call site] 00067
4 jxl::Status::Status(bool) [function] [call site] 00068
4 jxl::(anonymous namespace)::Tokenizer::Next(std::__1::basic_string , std::__1::allocator >*) [function] [call site] 00069
4 jxl::Status::operator bool() const [function] [call site] 00070
4 jxl::Status jxl::(anonymous namespace)::ParseEnum (std::__1::basic_string , std::__1::allocator > const&, jxl::(anonymous namespace)::EnumName const*, unsigned long, JxlTransferFunction*) [function] [call site] 00071
4 jxl::Status::operator bool() const [function] [call site] 00072
4 jxl::Status::Status(bool) [function] [call site] 00073
4 jxl::(anonymous namespace)::ParseDouble(std::__1::basic_string , std::__1::allocator > const&, double*) [function] [call site] 00074
4 jxl::Status::operator bool() const [function] [call site] 00075
4 jxl::Status::Status(bool) [function] [call site] 00076
4 jxl::Status::Status(jxl::StatusCode) [function] [call site] 00077
3 jxl::Status::operator bool() const [function] [call site] 00078
3 jxl::Status::Status(bool) [function] [call site] 00079