<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/114377>114377</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            MSAN: `strlcpy` and `strlcat` is not supported
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          pkillarjun
      </td>
    </tr>
</table>

<pre>
    ### Glibc commit  [Implement strlcpy and strlcat](https://sourceware.org/git/?p=glibc.git;a=commit;h=454a20c8756c9c1d55419153255fc7692b3d2199).

### Built environment

```bash
$ clang -v
clang version 18.1.8 (Fedora 18.1.8-1.fc40)
Target: x86_64-redhat-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Configuration file: /etc/clang/x86_64-redhat-linux-gnu-clang.cfg
System configuration file directory: /etc/clang/
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/14
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/14
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64

$ ldd --version
ldd (GNU libc) 2.39
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

$ uname -a
Linux fedora 6.11.4-201.fc40.x86_64 #1 SMP PREEMPT_DYNAMIC Sun Oct 20 15:04:22 UTC 2024 x86_64 GNU/Linux
```

### test code

```c
/* msan_strlcpy_test.c */

#include <stdio.h>
#include <string.h>

// https://sourceware.org/git/?p=glibc.git;a=blob;f=string/strlcpy.c;h=c6c33b1e33d601c66776ea6eec1b0c8f8ed696a9;hb=ef321e23c20eebc6d6fb4044425c00e6df27b05f
size_t
__strlcpy (char *__restrict dest, const char *__restrict src, size_t size)
{
 size_t src_length = strlen (src);

  if (__glibc_unlikely (src_length >= size))
    {
      if (size > 0)
        {
          /* Copy the leading portion of the string.  The last
             character is subsequently overwritten with the NUL
             terminator, but the destination size is usually a
             multiple of a small power of two, so writing it twice
             should be more efficient than copying an odd number of
             bytes.  */
          memcpy (dest, src, size);
          dest[size - 1] = '\0';
        }
 }
  else
    /* Copy the string and its terminating NUL character. */
    memcpy (dest, src, src_length + 1);
  return src_length;
}

int main()
{
    char defname[256];

 // The program won't crash here
    memset(defname, 0x00, 4);
    for (int i = 0; i < 4; i++) {
        printf("%02x ", defname[i]);
 }
    printf("\n");

    // The program won't crash here
 strncpy(defname, "AAAAAAAA", 8);
    for (int i = 0; i < 8; i++) {
 printf("%02x ", defname[i]);
    }
    printf("\n");

 // The program won't crash here
    __strlcpy(defname, "AAAAAAAAAAAA", 12);
    for (int i = 0; i < 12; i++) {
        printf("%02x ", defname[i]);
    }
    printf("\n");

    // The program shouldn't crash, But it dose;
    strlcpy(defname, "AAAAAAAAAAAAAAAA", 16);
    for (int i = 0; i < 16; i++) {
        printf("%02x ", defname[i]);
    }
    printf("\n");
}
```

### compile and run

```bash
$ clang -fsanitize=memory msan_strlcpy_test.c -o msan_strlcpy_test

$ ./msan_strlcpy_test
00 00 00 00 
41 41 41 41 41 41 41 41 
41 41 41 41 41 41 41 41 41 41 41 00 
==154959==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x4c8d6d in main (/home/down/Desktop/msan_strlcpy_test+0x4c8d6d) (BuildId: 90183bc646d4995b7cd61af36dece204d375dd3e)
    #1 0x7f03337af087 in __libc_start_call_main (/lib64/libc.so.6+0x2a087) (BuildId: 77c77fee058b19c6f001cf2cb0371ce3b8341211)
    #2 0x7f03337af14a in __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x2a14a) (BuildId: 77c77fee058b19c6f001cf2cb0371ce3b8341211)
    #3 0x430304 in _start (/home/down/Desktop/msan_strlcpy_test+0x430304) (BuildId: 90183bc646d4995b7cd61af36dece204d375dd3e)

SUMMARY: MemorySanitizer: use-of-uninitialized-value (/home/down/Desktop/msan_strlcpy_test+0x4c8d6d) (BuildId: 90183bc646d4995b7cd61af36dece204d375dd3e) in main
Exiting
```

Ping @vitalybuka 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWNty46jWfhpys8oqBDpe-MKHOH-qOulUDjU1Vy4EyGYaSf4BJfE8_S6Q7DiJu_d075nau0sVqReLj28dATNr1aaVcorSOUqXF6x3285Md9-U1sz80bcXVSf2U0To8MCVVhUH3jWNcgAonV83Oy0b2Tqwzmi-2wNrxfDNHEqXiBRb53YW0RkiK0RWtusNly_MyKgzG0RWG-X8CF3tEF1uPH7kRXTOEF0OKyE63yK6TNKEEcyLPM14yWORpklcxiklaVrzPCtJRQWJyxKRMkJ4ifBs_HukP--VdiDbZ2W61rN-p5bh4amY3R5mJsA1azcweR4kw_-epbGqayEuojgqAJFiJUVn2CiYxFHNE4xIOUx6ZGYjHaIzeC2ydZZMjBRb5iZatf3rZNP2o9rWSCag6YTUXnnXWfU6DF231jGtpVgq44cQWfXWILKqVDtoLLq2VpveMOeJ1UrLUU86jsgq8EZk9R0CkzAe8XozoD3srZMN8E-gIJSR3HVmfxZ-mL3q-lYAZ61QgjkJV4sFqMGCgPTJArKKIkRWWlU-ITg_TxSRVZyM_KSW3EnxD0AvjrSbXjvlJ9IZRIjOUYKb7IdalIxqlHzg-SOst1zTQsBkMmbXIPYiRIqr2yfwtYFICSSi5SHou71Rm63zKoswhkkCKyMlPHS182UGIRqDc8gCrlseHdJNWVAWaq9tR21E52ClBLf1Ml-qUHcGeLfbq3bjE0IoD2UjgMetNNIj3H4dEF-YMax1ew_Sdg7ks2zD9JvL-8X_zW4fZ_PrL9ePv0NnYHX9eHv58ACrr_cwg7vZ_eP14unL7B7unu7vvj5cjiR_M8o52UK1h_tO-95yw68Mc9vQZ560UXwLSyN3O2mij-7sW9ZImLBB8sUHGuqhULMojqNkQvBQqtGQE4AIjeHh5g7u7i8vb-4e18vfb2c31wt46Fv4yh0QDHGK6AwniM4IgafHxeDzEeDq9gmRVVjqQ1c535GctA54J-TZTsQP6itEZtBY1q7HNrv2EyMOiMyOZXfEVi3XvZCA6MI6obpoi-jl-VGj2s3p8Nt6K_hPGneluwrReY3ocljEIwzUIz72c55xSqtYUioyHPMsy_NMskxKHleYF3UhRVZmrPTqFaJLWVMSS0I5wVJWPBNZXSU4SRKScoxlJmqSVzitByOs-lOuxwa_PrjN1wnfMuP9tl4b6blxB0Ja54uDd60Px2cFa7gfHzDD69jcUT4fPo6jhq-1bDduC4guw14oW79wAPHWnPoaQNV-cL0OLlz3rVbfpN6PE96QLgPYuPJhcQCANwLh3wDnFf0kwO90z-gH0ZBgvp2EyteSCV_uu86Ezt_VQ0MY0iVUPmhm3UccgOA8xp00vjHYvrLy_3vZOr2H7lmal7GcX5TbBsjbpy9nQJw0jWqZ64z3etW7oOuj5KWeUbBPWehtz7TeAzuDEnruTktPn4FtmNaw616kCfa8dCGiHXhO3ljlwL0oLs8g2W3XawGVhKYzEmRdK678ocdtWXtsjqyFTgho-6YKa5wBqvZO-tZ5WrYnhGUz5ughIU_y7jR13qYExXQe3DGBGKXLkHSI5ChdYP_6OAfly1Hw9gVS2xO7P6bDEPfQcZWzx-h42e3Tl7eQR5_s-r5FJ6lN5hC_t85I15v2ROmtaA6ch7-qddAwv80XZwpyTEcQsvY7AUrnJM38ofRDCY79zmf1znQbwxp48btl7oAbZrfgN7p3Rlnpgk0DLlkAfsXYv5OPYfLbHyKFJ6pCaLDfHf2nV_afiMzDU36uzJ1RrauDcQSRFJNXCF-LE5NUOGWfLHoS1g8I6aIN0z_3IPgpH1hnWr7bv_cAImQ2_hs5Fj_ji-K7vvglJ7xL9L_sh59MhOO28l1PnHgjJj_jjpj8I7nxa245nx5DUzzxjl973jvfSEVn5btV_4qjTp2V_ZSzsv8JZx1b04-PfLxrdv4m5dup6du_fgWtLWuV81sBXTay6cz-7JFw0n0WfzwZ-yvRd5QwhuMzSJIYzj4_Hj0-RxxEl4gu4zQp03L4_m12f3t9e-UvRTfBoIfRwnDJ7a2cdPWkb5UXMq3-lGLyzHT_bquiGPBrwguRCVBt2A0gxGi17XyarUT34q-BS2m_uW531nAyP0CE7CHFvFdaXAvPosRxQSueJZlIyjKtci6ymNU0E5JLghNB81QIKt-fyfw9Ar_mNaaU5qzGRe7JrdfhjGcdM27NmdbrE7paVVkyvHlkuygLtAjDRf6ZVZ7zPK-lxGlRxSXPaoxjXhNeYZrHXNKqoElM4vgjK3LKKk7YJ1ZhN03w1Zfr-WJNIhKl_4ZenLC_jx71saSY4iQQC5R-LZoB5G-I5niPf7q5md3__tOJ-t_KxEMlDOwvX8MJ9wfd6c6f5VCCn5Vjel_13xhciCkVJS3ZhZzGOcU0S7KyvNhOZSHyuuZ1ncYFI5zhuCpiyuIiLmqZ4uxCTf2NOMY0xkUa0yJKYlomCedZzOuKpRVKsGyY0pHWz42_TV4oa3s5jeOE5vmFZpXUNvwmSUgrXyCMhqa7vDBTP2lS9RuLEqyVdfYNximn5fTmYXYbfgfK8GHbyXBotwcJc16ibPiVwvY7f8-R4qI3evr-0rtRbttXEe8an_n6-fCa7Ez3h-T-AhzIWURWI_vnKflXAAAA___f5Q-e">