• Tom Lane's avatar
    Clean up assorted failures under clang's -fsanitize=undefined checks. · b0bc196e
    Tom Lane authored
    Most of these are cases where we could call memcpy() or other libc
    functions with a NULL pointer and a zero count, which is forbidden
    by POSIX even though every production version of libc allows it.
    We've fixed such things before in a piecemeal way, but apparently
    never made an effort to try to get them all.  I don't claim that
    this patch does so either, but it gets every failure I observe in
    check-world, using clang 12.0.1 on current RHEL8.
    
    numeric.c has a different issue that the sanitizer doesn't like:
    "ln(-1.0)" will compute log10(0) and then try to assign the
    resulting -Inf to an integer variable.  We don't actually use the
    result in such a case, so there's no live bug.
    
    Back-patch to all supported branches, with the idea that we might
    start running a buildfarm member that tests this case.  This includes
    back-patching c1132aae3 (Check the size in COPY_POINTER_FIELD),
    which previously silenced some of these issues in copyfuncs.c.
    
    Discussion: https://postgr.es/m/CALNJ-vT9r0DSsAOw9OXVJFxLENoVS_68kJ5x0p44atoYH+H4dg@mail.gmail.com
    b0bc196e
xact.c 174 KB