https://github.com/git/git
Revision 0227130244c007870c106fc613903d078730e45c authored by Johannes Schindelin on 12 January 2023, 00:05:02 UTC, committed by Junio C Hamano on 19 January 2023, 21:38:06 UTC
On platforms where `size_t` does not have the same width as `unsigned
long`, passing a pointer to the former when a pointer to the latter is
expected can lead to problems.

Windows and 32-bit Linux are among the affected platforms.

In this instance, we want to store the size of the blob that was read in
that variable. However, `read_blob_data_from_index()` passes that
pointer to `read_object_file()` which expects an `unsigned long *`.
Which means that on affected platforms, the variable is not fully
populated and part of its value is left uninitialized. (On Big-Endian
platforms, this problem would be even worse.)

The consequence is that depending on the uninitialized memory's
contents, we may erroneously reject perfectly fine attributes.

Let's address this by passing a pointer to a variable of the expected
data type.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent b7b37a3
Raw File
Tip revision: 0227130244c007870c106fc613903d078730e45c authored by Johannes Schindelin on 12 January 2023, 00:05:02 UTC
attr: adjust a mismatched data type
Tip revision: 0227130
.cirrus.yml
env:
  CIRRUS_CLONE_DEPTH: 1

freebsd_12_task:
  freebsd_instance:
    image: freebsd-12-1-release-amd64
  install_script:
    pkg install -y gettext gmake perl5
  create_user_script:
    - pw useradd git
    - chown -R git:git .
  build_script:
    - su git -c gmake
  test_script:
    - su git -c 'gmake test'
back to top