**Describe the bug**
`CONNECT` package with  `User Property` may lead to unexpected behaviors

**To Reproduce**
Use MQTTX to connect to nanomq with `User Properties`

```
==218138==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000006031 at pc 0x646a30f28c3f bp 0x718a6e5f88f0 sp 0x718a6e5f88e0
READ of size 1 at 0x602000006031 thread T7
    #0 0x646a30f28c3e in get_utf8_str /home/hermann/Documents/hermannDocuments/nanomq/nng/src/sp/protocol/mqtt/mqtt_parser.c:200
    #1 0x646a30f6edcd in check_properties /home/hermann/Documents/hermannDocuments/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:3939
    #2 0x646a30f2b658 in conn_handler /home/hermann/Documents/hermannDocuments/nanomq/nng/src/sp/protocol/mqtt/mqtt_parser.c:617
    #3 0x646a310253b1 in tcptran_pipe_nego_cb /home/hermann/Documents/hermannDocuments/nanomq/nng/src/sp/transport/mqtt/broker_tcp.c:373
    #4 0x646a30f14afc in nni_taskq_thread /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/taskq.c:47
    #5 0x646a30f15da3 in nni_thr_wrap /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/thread.c:94
    #6 0x646a30f1e94e in nni_plat_thr_main /home/hermann/Documents/hermannDocuments/nanomq/nng/src/platform/posix/posix_thread.c:266
    #7 0x718a74c94ac2 in start_thread nptl/pthread_create.c:442
    #8 0x718a74d2684f  (/lib/x86_64-linux-gnu/libc.so.6+0x12684f)

0x602000006031 is located 0 bytes to the right of 1-byte region [0x602000006030,0x602000006031)
allocated by thread T7 here:
    #0 0x718a750b4887 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
    #1 0x646a30f19d9e in nni_alloc /home/hermann/Documents/hermannDocuments/nanomq/nng/src/platform/posix/posix_alloc.c:20
    #2 0x646a30f6a1db in mqtt_buf_dup /home/hermann/Documents/hermannDocuments/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:3117
    #3 0x646a30f6a472 in mqtt_kv_dup /home/hermann/Documents/hermannDocuments/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:3153
    #4 0x646a30f6dabc in property_parse /home/hermann/Documents/hermannDocuments/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:3711
    #5 0x646a30f6f5a0 in decode_buf_properties /home/hermann/Documents/hermannDocuments/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:4019
    #6 0x646a30f2b5a7 in conn_handler /home/hermann/Documents/hermannDocuments/nanomq/nng/src/sp/protocol/mqtt/mqtt_parser.c:613
    #7 0x646a310253b1 in tcptran_pipe_nego_cb /home/hermann/Documents/hermannDocuments/nanomq/nng/src/sp/transport/mqtt/broker_tcp.c:373
    #8 0x646a30f14afc in nni_taskq_thread /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/taskq.c:47
    #9 0x646a30f15da3 in nni_thr_wrap /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/thread.c:94
    #10 0x646a30f1e94e in nni_plat_thr_main /home/hermann/Documents/hermannDocuments/nanomq/nng/src/platform/posix/posix_thread.c:266
    #11 0x718a74c94ac2 in start_thread nptl/pthread_create.c:442

Thread T7 created by T0 here:
    #0 0x718a75058685 in __interceptor_pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:216
    #1 0x646a30f1ea7e in nni_plat_thr_init /home/hermann/Documents/hermannDocuments/nanomq/nng/src/platform/posix/posix_thread.c:279
    #2 0x646a30f1604f in nni_thr_init /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/thread.c:121
    #3 0x646a30f14e1e in nni_taskq_init /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/taskq.c:92
    #4 0x646a30f15a6d in nni_taskq_sys_init /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/taskq.c:273
    #5 0x646a30efeb7e in nni_init_helper /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/init.c:35
    #6 0x646a30f1ee23 in nni_plat_init /home/hermann/Documents/hermannDocuments/nanomq/nng/src/platform/posix/posix_thread.c:422
    #7 0x646a30efebf1 in nni_init /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/init.c:57
    #8 0x646a30f57025 in nng_mtx_alloc /home/hermann/Documents/hermannDocuments/nanomq/nng/src/supplemental/util/platform.c:93
    #9 0x646a30ed9b31 in log_init /home/hermann/Documents/hermannDocuments/nanomq/nanomq/mqtt_api.c:232
    #10 0x646a30ee6602 in broker_start /home/hermann/Documents/hermannDocuments/nanomq/nanomq/apps/broker.c:1825
    #11 0x646a30eda828 in main /home/hermann/Documents/hermannDocuments/nanomq/nanomq/nanomq.c:142
    #12 0x718a74c29d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58

SUMMARY: AddressSanitizer: heap-buffer-overflow /home/hermann/Documents/hermannDocuments/nanomq/nng/src/sp/protocol/mqtt/mqtt_parser.c:200 in get_utf8_str
Shadow bytes around the buggy address:
  0x0c047fff8bb0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8bc0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8bd0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8be0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8bf0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c047fff8c00: fa fa 05 fa fa fa[01]fa fa fa 01 fa fa fa fa fa
  0x0c047fff8c10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8c20: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8c30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8c40: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8c50: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==218138==ABORTING
```

`CONNECT` package with  `User Property` may lead to unexpected behaviors
This is a GitHub Issue
repo:nanomq
owner:emqx
Title : `CONNECT` package with  `User Property` may lead to unexpected behaviors
Issue date:

--- start body ---
**Describe the bug**
`CONNECT` package with  `User Property` may lead to unexpected behaviors

**To Reproduce**
Use MQTTX to connect to nanomq with `User Properties`

```
==218138==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000006031 at pc 0x646a30f28c3f bp 0x718a6e5f88f0 sp 0x718a6e5f88e0
READ of size 1 at 0x602000006031 thread T7
    #0 0x646a30f28c3e in get_utf8_str /home/hermann/Documents/hermannDocuments/nanomq/nng/src/sp/protocol/mqtt/mqtt_parser.c:200
    #1 0x646a30f6edcd in check_properties /home/hermann/Documents/hermannDocuments/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:3939
    #2 0x646a30f2b658 in conn_handler /home/hermann/Documents/hermannDocuments/nanomq/nng/src/sp/protocol/mqtt/mqtt_parser.c:617
    #3 0x646a310253b1 in tcptran_pipe_nego_cb /home/hermann/Documents/hermannDocuments/nanomq/nng/src/sp/transport/mqtt/broker_tcp.c:373
    #4 0x646a30f14afc in nni_taskq_thread /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/taskq.c:47
    #5 0x646a30f15da3 in nni_thr_wrap /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/thread.c:94
    #6 0x646a30f1e94e in nni_plat_thr_main /home/hermann/Documents/hermannDocuments/nanomq/nng/src/platform/posix/posix_thread.c:266
    #7 0x718a74c94ac2 in start_thread nptl/pthread_create.c:442
    #8 0x718a74d2684f  (/lib/x86_64-linux-gnu/libc.so.6+0x12684f)

0x602000006031 is located 0 bytes to the right of 1-byte region [0x602000006030,0x602000006031)
allocated by thread T7 here:
    #0 0x718a750b4887 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145
    #1 0x646a30f19d9e in nni_alloc /home/hermann/Documents/hermannDocuments/nanomq/nng/src/platform/posix/posix_alloc.c:20
    #2 0x646a30f6a1db in mqtt_buf_dup /home/hermann/Documents/hermannDocuments/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:3117
    #3 0x646a30f6a472 in mqtt_kv_dup /home/hermann/Documents/hermannDocuments/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:3153
    #4 0x646a30f6dabc in property_parse /home/hermann/Documents/hermannDocuments/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:3711
    #5 0x646a30f6f5a0 in decode_buf_properties /home/hermann/Documents/hermannDocuments/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:4019
    #6 0x646a30f2b5a7 in conn_handler /home/hermann/Documents/hermannDocuments/nanomq/nng/src/sp/protocol/mqtt/mqtt_parser.c:613
    #7 0x646a310253b1 in tcptran_pipe_nego_cb /home/hermann/Documents/hermannDocuments/nanomq/nng/src/sp/transport/mqtt/broker_tcp.c:373
    #8 0x646a30f14afc in nni_taskq_thread /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/taskq.c:47
    #9 0x646a30f15da3 in nni_thr_wrap /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/thread.c:94
    #10 0x646a30f1e94e in nni_plat_thr_main /home/hermann/Documents/hermannDocuments/nanomq/nng/src/platform/posix/posix_thread.c:266
    #11 0x718a74c94ac2 in start_thread nptl/pthread_create.c:442

Thread T7 created by T0 here:
    #0 0x718a75058685 in __interceptor_pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:216
    #1 0x646a30f1ea7e in nni_plat_thr_init /home/hermann/Documents/hermannDocuments/nanomq/nng/src/platform/posix/posix_thread.c:279
    #2 0x646a30f1604f in nni_thr_init /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/thread.c:121
    #3 0x646a30f14e1e in nni_taskq_init /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/taskq.c:92
    #4 0x646a30f15a6d in nni_taskq_sys_init /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/taskq.c:273
    #5 0x646a30efeb7e in nni_init_helper /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/init.c:35
    #6 0x646a30f1ee23 in nni_plat_init /home/hermann/Documents/hermannDocuments/nanomq/nng/src/platform/posix/posix_thread.c:422
    #7 0x646a30efebf1 in nni_init /home/hermann/Documents/hermannDocuments/nanomq/nng/src/core/init.c:57
    #8 0x646a30f57025 in nng_mtx_alloc /home/hermann/Documents/hermannDocuments/nanomq/nng/src/supplemental/util/platform.c:93
    #9 0x646a30ed9b31 in log_init /home/hermann/Documents/hermannDocuments/nanomq/nanomq/mqtt_api.c:232
    #10 0x646a30ee6602 in broker_start /home/hermann/Documents/hermannDocuments/nanomq/nanomq/apps/broker.c:1825
    #11 0x646a30eda828 in main /home/hermann/Documents/hermannDocuments/nanomq/nanomq/nanomq.c:142
    #12 0x718a74c29d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58

SUMMARY: AddressSanitizer: heap-buffer-overflow /home/hermann/Documents/hermannDocuments/nanomq/nng/src/sp/protocol/mqtt/mqtt_parser.c:200 in get_utf8_str
Shadow bytes around the buggy address:
  0x0c047fff8bb0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8bc0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8bd0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8be0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8bf0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c047fff8c00: fa fa 05 fa fa fa[01]fa fa fa 01 fa fa fa fa fa
  0x0c047fff8c10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8c20: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8c30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8c40: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8c50: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==218138==ABORTING
```

--- end body ---
