[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()

2017-03-08 Thread Eric Fiselier via Phabricator via cfe-commits
EricWF closed this revision.
EricWF added a comment.

Committed in r297355.


https://reviews.llvm.org/D30764



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()

2017-03-08 Thread Tom via Phabricator via cfe-commits
tomcherry added a comment.

I don't have commit access, so please commit for me.

Thank you


https://reviews.llvm.org/D30764



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()

2017-03-08 Thread Eric Fiselier via Phabricator via cfe-commits
EricWF accepted this revision.
EricWF added a comment.
This revision is now accepted and ready to land.

@Tom Do you have commit acces or would you like me to commit this for you?


https://reviews.llvm.org/D30764



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()

2017-03-08 Thread Tom via Phabricator via cfe-commits
tomcherry updated this revision to Diff 9.
tomcherry added a comment.

Moved comments to an appropriate line


https://reviews.llvm.org/D30764

Files:
  include/string


Index: include/string
===
--- include/string
+++ include/string
@@ -2560,6 +2560,7 @@
 template 
 basic_string<_CharT, _Traits, _Allocator>&
 basic_string<_CharT, _Traits, _Allocator>::replace(size_type __pos, size_type 
__n1, const value_type* __s, size_type __n2)
+_LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK
 {
 _LIBCPP_ASSERT(__n2 == 0 || __s != nullptr, "string::replace received 
nullptr");
 size_type __sz = size();
@@ -2599,6 +2600,8 @@
 }
 traits_type::move(__p + __pos, __s, __n2);
 __finish:
+// __sz += __n2 - __n1; in this and the below function below can cause 
unsigned integer overflow,
+// but this is a safe operation, so we disable the check.
 __sz += __n2 - __n1;
 __set_size(__sz);
 __invalidate_iterators_past(__sz);
@@ -2612,6 +2615,7 @@
 template 
 basic_string<_CharT, _Traits, _Allocator>&
 basic_string<_CharT, _Traits, _Allocator>::replace(size_type __pos, size_type 
__n1, size_type __n2, value_type __c)
+_LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK
 {
 size_type __sz = size();
 if (__pos > __sz)


Index: include/string
===
--- include/string
+++ include/string
@@ -2560,6 +2560,7 @@
 template 
 basic_string<_CharT, _Traits, _Allocator>&
 basic_string<_CharT, _Traits, _Allocator>::replace(size_type __pos, size_type __n1, const value_type* __s, size_type __n2)
+_LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK
 {
 _LIBCPP_ASSERT(__n2 == 0 || __s != nullptr, "string::replace received nullptr");
 size_type __sz = size();
@@ -2599,6 +2600,8 @@
 }
 traits_type::move(__p + __pos, __s, __n2);
 __finish:
+// __sz += __n2 - __n1; in this and the below function below can cause unsigned integer overflow,
+// but this is a safe operation, so we disable the check.
 __sz += __n2 - __n1;
 __set_size(__sz);
 __invalidate_iterators_past(__sz);
@@ -2612,6 +2615,7 @@
 template 
 basic_string<_CharT, _Traits, _Allocator>&
 basic_string<_CharT, _Traits, _Allocator>::replace(size_type __pos, size_type __n1, size_type __n2, value_type __c)
+_LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK
 {
 size_type __sz = size();
 if (__pos > __sz)
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()

2017-03-08 Thread Eric Fiselier via Phabricator via cfe-commits
EricWF added a comment.

Side note: There are plenty of tests in the test-suite that trigger this 
overflow, so no new tests are needed.

When I have time I'm going to enable `-fsanitize=unsigned-integer-overflow` 
once I have time to clean up any existing failures.


https://reviews.llvm.org/D30764



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()

2017-03-08 Thread Eric Fiselier via Phabricator via cfe-commits
EricWF added inline comments.



Comment at: include/string:2559
 // replace
+// __sz += __n2 - __n1; in the two functions below can cause unsigned integer 
overflow,
+// but this is a safe operation, so we disable the check.

Please put this comment inside one of the function bodies, right above the 
offending line.

I think putting it here will result in it maybe becoming unmaintained. 


https://reviews.llvm.org/D30764



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()

2017-03-08 Thread Stephen Hines via Phabricator via cfe-commits
srhines added a comment.

You probably want to remove the Change-Id section above in your description (or 
at least drop that when you finally submit this to libc++).


https://reviews.llvm.org/D30764



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits