• Show log

    Commit

  • Hash : da48edfc
    Author : DRC
    Date : 2023-10-09T14:13:55

    jchuff.c: Fix uninit read w/ AArch64, WITH_SIMD=0
    
    Because of bf01ed2fbc02c15e86f414ff4946b66b4e5a00f1, the simd field in
    huff_entropy_encoder (and, by extension, the simd field in
    savable_state) is only initialized if WITH_SIMD is defined.  Due to an
    oversight, the simd field in savable_state was queried in flush_bits()
    regardless of whether WITH_SIMD was defined.  In most cases, both
    branches of the query have identical code, and the optimizer removes the
    branch.  However, because the legacy Neon GAS Huffman encoder uses the
    older bit buffer logic from libjpeg-turbo 2.0.x and prior (refer to
    087c29e07f7533ec82fd7eb1dafc84c29e7870ec), the branches do not have
    identical code when building for AArch64 with NEON_INTRINSICS undefined
    (which will be the case if WITH_SIMD is undefined.)  Thus, if
    libjpeg-turbo was built for AArch64 with the SIMD extensions disabled
    at build time, it was possible for the Neon GAS branch in flush_bits()
    to be taken, which would have set put_bits to a value that is incorrect
    for the C Huffman encoder.  Referring to #728, a user reported that this
    issue sometimes caused libjpeg-turbo to generate bogus JPEG images if it
    was built for AArch64 without SIMD extensions and subsequently used
    through the Qt framework.  (It should be noted, however, that disabling
    the SIMD extensions in AArch64 builds of libjpeg-turbo is inadvisable
    for performance reasons.)
    
    I was unable to reproduce the issue on Linux/AArch64 using libjpeg-turbo
    alone, despite testing various versions of GCC and Clang and various
    optimization levels.  However, the issue is reproducible using MSan with
    -O0, so this commit also modifies the GitHub Actions workflow so that
    compiler optimization is disabled in the linux-msan job.  That should
    prevent the issue or similar issues from re-emerging.
    
    Fixes #728
    

  • Properties

  • Git HTTP https://git.kmx.io/kc3-lang/libjpeg-turbo.git
    Git SSH git@git.kmx.io:kc3-lang/libjpeg-turbo.git
    Public access ? public
    Description

    Fork of libjpeg with SIMD

    Users
    thodg_m kc3_lang_org thodg_w www_kmx_io thodg_l thodg
    Tags