diff options
Diffstat (limited to 'clang-tools-extra/docs')
| -rw-r--r-- | clang-tools-extra/docs/ReleaseNotes.rst | 2 | ||||
| -rw-r--r-- | clang-tools-extra/docs/clang-tidy/checks/bugprone-misplaced-operator-in-strlen-in-alloc.rst | 28 |
2 files changed, 24 insertions, 6 deletions
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 0237787871e..c357b86a43f 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -92,7 +92,7 @@ Improvements to clang-tidy ``strlen()``, ``strnlen()``, ``strnlen_s()``, ``wcslen()``, ``wcsnlen()``, and ``wcsnlen_s()`` instead of the result and the value is used as an argument to a memory allocation function (``malloc()``, ``calloc()``, ``realloc()``, - ``alloca()``). + ``alloca()``) or the ``new[]`` operator in `C++`. - Renamed checks to use correct term "implicit conversion" instead of "implicit cast" and modified messages and option names accordingly: diff --git a/clang-tools-extra/docs/clang-tidy/checks/bugprone-misplaced-operator-in-strlen-in-alloc.rst b/clang-tools-extra/docs/clang-tidy/checks/bugprone-misplaced-operator-in-strlen-in-alloc.rst index 66b03084426..463e3b88d48 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/bugprone-misplaced-operator-in-strlen-in-alloc.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/bugprone-misplaced-operator-in-strlen-in-alloc.rst @@ -6,12 +6,12 @@ bugprone-misplaced-operator-in-strlen-in-alloc Finds cases where ``1`` is added to the string in the argument to ``strlen()``, ``strnlen()``, ``strnlen_s()``, ``wcslen()``, ``wcsnlen()``, and ``wcsnlen_s()`` instead of the result and the value is used as an argument to a memory -allocation function (``malloc()``, ``calloc()``, ``realloc()``, ``alloca()``). -Cases where ``1`` is added both to the parameter and the result of the -``strlen()``-like function are ignored, as are cases where the whole addition is -surrounded by extra parentheses. +allocation function (``malloc()``, ``calloc()``, ``realloc()``, ``alloca()``) or +the ``new[]`` operator in `C++`. Cases where ``1`` is added both to the +parameter and the result of the ``strlen()``-like function are ignored, as are +cases where the whole addition is surrounded by extra parentheses. -Example code: +`C` example code: .. code-block:: c @@ -28,6 +28,24 @@ to its argument. In the example above the fix would be char *c = (char*) malloc(strlen(str) + 1); +`C++` example code: + +.. code-block:: c++ + + void bad_new(char *str) { + char *c = new char[strlen(str + 1)]; + } + + +As in the `C` code with the ``malloc()`` function, the suggested fix is to +add ``1`` to the return value of ``strlen()`` and not to its argument. In the +example above the fix would be + +.. code-block:: c++ + + char *c = new char[strlen(str) + 1]; + + Example for silencing the diagnostic: .. code-block:: c |

