
Código-fonte do libvpx corrigido abordando CVE-2023-5217 com suporte a sanitizers e configurações de build multiplataforma para codificação VP8/VP9 segura.
README - 31 de janeiro de 2019
Bem-vindo ao WebM VP8/VP9 Codec SDK!
COMPILANDO OS APLICATIVOS/BIBLIOTECAS:
O sistema de build utilizado é semelhante ao autotools. A compilação geralmente consiste em "configurar" com as opções de build desejadas e, em seguida, usar o GNU make para compilar o aplicativo.
* Todos os alvos x86 exigem que o montador Yasm[1] esteja instalado[2].
* Todas as compilações para Windows exigem que o Cygwin[3] esteja instalado.
* A compilação da documentação requer o Doxygen[4]. Se você não
tiver esse pacote, a opção install-docs será desabilitada.
* O download dos dados para os testes unitários requer curl[5] e sha1sum.
O sha1sum é fornecido pelo GNU coreutils, instalado por padrão em
muitas plataformas *nix, bem como no MinGW e no Cygwin. Se o coreutils não estiver
disponível, uma versão compatível do sha1sum pode ser compilada a partir do
código-fonte[6]. Esses requisitos são opcionais se você não estiver executando os testes
unitários.
[1]: http://www.tortall.net/projects/yasm
[2]: Para o Visual Studio, o binário base do yasm (não o vsyasm) deve estar no
PATH do Visual Studio. Para o VS2017, basta renomear
yasm-<version>-<arch>.exe para yasm.exe e colocá-lo em:
Program Files (x86)/Microsoft Visual Studio/2017/<level>/Common7/Tools/
[3]: http://www.cygwin.com
[4]: http://www.doxygen.org
[5]: http://curl.haxx.se
[6]: http://www.microbrew.org/tools/md5sha1sum/
2. Compilações fora da árvore Compilações fora da árvore são um método suportado para compilar o aplicativo. Para uma compilação fora da árvore, a árvore de fontes é mantida separada dos arquivos-objeto produzidos durante a compilação. Por exemplo:
$ mkdir build
$ cd build
$ ../libvpx/configure <options>
$ make
3. Opções de configuração O script 'configure' suporta várias opções. A opção --help pode ser usada para obter uma lista das opções suportadas: $ ../libvpx/configure --help
Analisadores de compilador Os compiladores adicionaram sanitizadores que instrumentam os binários com informações sobre cálculo de endereços, uso de memória, threads, comportamento indefinido e outros erros comuns. Para simplificar a compilação do libvpx com alguns desses recursos, use tools/set_analyzer_env.sh antes de executar o configure. Ele definirá o compilador e os flags necessários para a compilação, bem como as variáveis de ambiente lidas pelo analisador ao testar os binários. $ source ../libvpx/tools/set_analyzer_env.sh address
Desenvolvimento cruzado Para desenvolvimento cruzado, a opção mais notável é a opção --target. A lista mais atualizada de alvos suportados pode ser encontrada no final da saída de --help do script configure. Até o momento, a lista de alvos disponíveis é:
arm64-android-gcc
arm64-darwin-gcc
arm64-linux-gcc
arm64-win64-gcc
arm64-win64-vs15
armv7-android-gcc
armv7-darwin-gcc
armv7-linux-rvct
armv7-linux-gcc
armv7-none-rvct
armv7-win32-gcc
armv7-win32-vs14
armv7-win32-vs15
armv7s-darwin-gcc
armv8-linux-gcc
mips32-linux-gcc
mips64-linux-gcc
ppc64le-linux-gcc
sparc-solaris-gcc
x86-android-gcc
x86-darwin8-gcc
x86-darwin8-icc
x86-darwin9-gcc
x86-darwin9-icc
x86-darwin10-gcc
x86-darwin11-gcc
x86-darwin12-gcc
x86-darwin13-gcc
x86-darwin14-gcc
x86-darwin15-gcc
x86-darwin16-gcc
x86-darwin17-gcc
x86-iphonesimulator-gcc
x86-linux-gcc
x86-linux-icc
x86-os2-gcc
x86-solaris-gcc
x86-win32-gcc
x86-win32-vs14
x86-win32-vs15
x86_64-android-gcc
x86_64-darwin9-gcc
x86_64-darwin10-gcc
x86_64-darwin11-gcc
x86_64-darwin12-gcc
x86_64-darwin13-gcc
x86_64-darwin14-gcc
x86_64-darwin15-gcc
x86_64-darwin16-gcc
x86_64-darwin17-gcc
x86_64-iphonesimulator-gcc
x86_64-linux-gcc
x86_64-linux-icc
x86_64-solaris-gcc
x86_64-win64-gcc
x86_64-win64-vs14
x86_64-win64-vs15
generic-gnu
O alvo generic-gnu, em conjunto com a variável de ambiente CROSS, pode ser usado para compilar de forma cruzada arquiteturas que não estão listadas explicitamente, se a toolchain for uma toolchain GNU de compilação cruzada (gcc/binutils). Outras toolchains POSIX provavelmente também funcionarão. Por exemplo, para compilar usando a mipsel-linux-uclibc toolchain, o seguinte comando poderia ser usado (observe a sintaxe do POSIX SH, adapte ao seu shell conforme necessário):
$ CROSS=mipsel-linux-uclibc- ../libvpx/configure
Além disso, os executáveis a serem invocados podem ser substituídos especificando as variáveis de ambiente: CC, AR, LD, AS, STRIP, NM. Flags adicionais podem ser passadas para esses executáveis com CFLAGS, LDFLAGS e ASFLAGS.
VETORES DE TESTE VP8/VP9: Os vetores de teste podem ser baixados e verificados usando o sistema de build após executar o configure. Para especificar um diretório alternativo, a variável de ambiente LIBVPX_TEST_DATA_PATH pode ser usada.
$ ./configure --enable-unit-tests $ LIBVPX_TEST_DATA_PATH=../libvpx-test-data make testdata
ESTILO DE CÓDIGO: O estilo de codificação usado por este projeto é aplicado com o clang-format usando a configuração contida no arquivo .clang-format na raiz do repositório.
Antes de enviar alterações para revisão, você pode formatar seu código com:
$ clang-format -i --style=file
$(git diff --name-only --diff-filter=ACMR '.[hc]' '.cc')
Verifique o arquivo .clang-format para saber a versão usada para gerá-lo se houver qualquer diferença entre a sua formatação local e o sistema de revisão.
Veja também: http://clang.llvm.org/docs/ClangFormat.html
SUPORTE Esta biblioteca é um projeto de código aberto apoiado pela sua comunidade. Por favor, envie um e-mail para [email protected] para obter ajuda.