CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
37 lines
1.2 KiB
ReStructuredText
37 lines
1.2 KiB
ReStructuredText
.. title:: clang-tidy - bugprone-string-literal-with-embedded-nul
|
|
|
|
bugprone-string-literal-with-embedded-nul
|
|
=========================================
|
|
|
|
Finds occurrences of string literal with embedded NUL character and validates
|
|
their usage.
|
|
|
|
Invalid escaping
|
|
----------------
|
|
|
|
Special characters can be escaped within a string literal by using their
|
|
hexadecimal encoding like ``\x42``. A common mistake is to escape them
|
|
like this ``\0x42`` where the ``\0`` stands for the NUL character.
|
|
|
|
.. code-block:: c++
|
|
|
|
const char* Example[] = "Invalid character: \0x12 should be \x12";
|
|
const char* Bytes[] = "\x03\0x02\0x01\0x00\0xFF\0xFF\0xFF";
|
|
|
|
Truncated literal
|
|
-----------------
|
|
|
|
String-like classes can manipulate strings with embedded NUL as they are
|
|
keeping track of the bytes and the length. This is not the case for a
|
|
``char*`` (NUL-terminated) string.
|
|
|
|
A common mistake is to pass a string-literal with embedded NUL to a string
|
|
constructor expecting a NUL-terminated string. The bytes after the first NUL
|
|
character are truncated.
|
|
|
|
.. code-block:: c++
|
|
|
|
std::string str("abc\0def"); // "def" is truncated
|
|
str += "\0"; // This statement is doing nothing
|
|
if (str == "\0abc") return; // This expression is always true
|