<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/79083>79083</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[libc++] std::shared_ptr::reset() should catch being reset to its own pointer
</td>
</tr>
<tr>
<th>Labels</th>
<td>
libc++,
hardening
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
var-const
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ldionne
</td>
</tr>
</table>
<pre>
https://compiler-explorer.com/z/s58er4o4z
```c++
#include <memory>
int main() {
auto p = std::make_shared<int>(42);
p.reset(p.get()); // Incorrect use of reset
}
```
libstdc++ catches that with
```
Assertion '__p == nullptr || __p != _M_ptr' failed.
```
I think it would be really easy to add this check in libc++ too.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8k9GOqzgMhp_G3FhF4EApF1z0tFvpXOwzVCFxS3ZCgpIws52nXwEdTTVaHSkiCo6t_3c-yxjN3TF3UP8ConcZdsq7mIAI6nMm5zT40FltvHOc9V4_uiGlKYI4Al2ALsqPk7EcdvzvZH3gkCs_Al0-gS6xPnCofPUJxRmK4_O7L7algH4ta_tLwjhlZ80I4jTy6MMDxF-vicYlHKVxQAegFqF5piIiyjl5nBDEGWPSizhxHOUbX-MgA2sQJ-PSUo8OFQG1IL6Spzxw5AR0mPL7ui_h9QZuDvG3Uz4EVgnnyOhvuGVs0przD1uvkq3pY9JPo6hkUgNHTINM-GHS8L9t2Y7HGDkk4x0CNdfram1x52ZrpxQQmhM0J1wjVC6R69_XKQWgBm_SWNb5H3T9xjQY94Ym4YefrcaeMbC09oEs4wOTR6n1cimiGli9oXFoTf_lJHmfZ7oTuhWtzLgrm6Jum7o9tNnQlUKS5KZvi55Vf6NCiKJUqmk13Zq63Wemo4KqoiRRUCmKNq-rUu_bW3vjPZe6rqAqeJTG5ta-j7kP98zEOHPXtMVBZFb2bOMT2G9RC7F0AqJBBs3OuPuT4dAtZXb9fI9QFdbEFL8LJ5PsCv9LofoFoo2ftbPr-QuWhcA4rL1bnxV7Nu6-kbG0z6SI_sPh5I1LHLI52B-DczdpmPvntCx6nttuCv4fVgnosrqOQJfV-H8BAAD__7PUFNk">