Fix ubsan failure in android::base::Split.

ubsan doesn't like us incrementing std::string::npos, even if we won't use
the result.

Bug: http://b/28729303
Test: ran tests
Change-Id: I8227eca57dc6f3e49626c7025514caa04ef18f0a
diff --git a/Android.bp b/Android.bp
index b9a6e0b..a7600f3 100644
--- a/Android.bp
+++ b/Android.bp
@@ -37,6 +37,9 @@
     cppflags: libbase_cppflags,
     export_include_dirs: ["include"],
     shared_libs: ["liblog"],
+    sanitize: {
+        misc_undefined: ["integer"],
+    },
     target: {
         android: {
             srcs: [
@@ -86,6 +89,9 @@
         "strings_test.cpp",
         "test_main.cpp",
     ],
+    sanitize: {
+        misc_undefined: ["integer"],
+    },
     target: {
         android: {
             srcs: ["properties_test.cpp"],
diff --git a/strings.cpp b/strings.cpp
index 46fe939..bfdaf12 100644
--- a/strings.cpp
+++ b/strings.cpp
@@ -36,11 +36,12 @@
 
   size_t base = 0;
   size_t found;
-  do {
+  while (true) {
     found = s.find_first_of(delimiters, base);
     result.push_back(s.substr(base, found - base));
+    if (found == s.npos) break;
     base = found + 1;
-  } while (found != s.npos);
+  }
 
   return result;
 }
diff --git a/strings_test.cpp b/strings_test.cpp
index 7a65a00..7ed5b2b 100644
--- a/strings_test.cpp
+++ b/strings_test.cpp
@@ -251,3 +251,7 @@
   ASSERT_FALSE(android::base::EqualsIgnoreCase("foo", "bar"));
   ASSERT_FALSE(android::base::EqualsIgnoreCase("foo", "fool"));
 }
+
+TEST(strings, ubsan_28729303) {
+  android::base::Split("/dev/null", ":");
+}