[PATCH] D139737: [-Wunsafe-buffer-usage] Initiate Fix-it generation for local variable declarations
Jan Korous via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 27 18:04:55 PST 2023
jkorous added a comment.
I am sorry I haven't notice this earlier - let's fix this before we land the patch.
================
Comment at: clang/lib/Analysis/UnsafeBufferUsage.cpp:690
+ Val.toString(Txt, 10, true);
+ return Txt.data();
+}
----------------
We either need a zero to terminate the string or pass the size of `Txt` to the `std::string` constructor here. (While `toString`'s name might sound like it'll take care of that it does not.)
Simplified testcase:
```
void local_ptr_to_array() {
int tmp;
int a[10];
int *p = a;
tmp = p[5];
}
```
what I get is (something like this):
```
void local_ptr_to_array() {
int tmp;
int a[10];
std::span<int> p {a, 10�o};
tmp = p[5];
}
```
The problem is that `APInt::toString` stores '1' and '0' to `Txt` but is missing the terminating `\0` character that `std::string` constructor expects.
================
Comment at: clang/lib/Analysis/UnsafeBufferUsage.cpp:690
+ Val.toString(Txt, 10, true);
+ return Txt.data();
+}
----------------
jkorous wrote:
> We either need a zero to terminate the string or pass the size of `Txt` to the `std::string` constructor here. (While `toString`'s name might sound like it'll take care of that it does not.)
>
> Simplified testcase:
> ```
> void local_ptr_to_array() {
> int tmp;
> int a[10];
> int *p = a;
> tmp = p[5];
> }
> ```
> what I get is (something like this):
> ```
> void local_ptr_to_array() {
> int tmp;
> int a[10];
> std::span<int> p {a, 10�o};
> tmp = p[5];
> }
> ```
> The problem is that `APInt::toString` stores '1' and '0' to `Txt` but is missing the terminating `\0` character that `std::string` constructor expects.
>
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D139737/new/
https://reviews.llvm.org/D139737
More information about the cfe-commits
mailing list