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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits