tkuchta updated this revision to Diff 510041.
tkuchta marked an inline comment as done.
tkuchta added a comment.

Hello, I applied the review comments for strsep.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141389/new/

https://reviews.llvm.org/D141389

Files:
  compiler-rt/lib/dfsan/dfsan_custom.cpp
  compiler-rt/test/dfsan/custom.cpp

Index: compiler-rt/test/dfsan/custom.cpp
===================================================================
--- compiler-rt/test/dfsan/custom.cpp
+++ compiler-rt/test/dfsan/custom.cpp
@@ -1636,80 +1636,38 @@
   char *p_delim = delim;
 
   // taint delim bytes
-  dfsan_set_label(n_label, p_delim, strlen(p_delim));
+  dfsan_set_label(i_label, p_delim, strlen(p_delim));
   // taint delim pointer
-  dfsan_set_label(i_label, &p_delim, sizeof(&p_delim));
+  dfsan_set_label(j_label, &p_delim, sizeof(&p_delim));
+  // taint the string data bytes
+  dfsan_set_label(k_label, s, 5);
+  // taint the string pointer
+  dfsan_set_label(m_label, &p_s, sizeof(&p_s));
 
   char *rv = strsep(&p_s, p_delim);
   assert(rv == &base[0]);
 #ifdef STRICT_DATA_DEPENDENCIES
-  ASSERT_ZERO_LABEL(rv);
-  ASSERT_READ_ZERO_LABEL(rv, strlen(rv));
+  ASSERT_LABEL(rv, k_label);
+  ASSERT_READ_LABEL(rv, strlen(rv), k_label);
 #else
-  ASSERT_LABEL(rv, dfsan_union(i_label, n_label));
-  ASSERT_INIT_ORIGIN_EQ_ORIGIN(&rv, *p_delim);
+  ASSERT_LABEL(rv, dfsan_union(dfsan_union(i_label, j_label), k_label));
+  ASSERT_INIT_ORIGIN_EQ_ORIGIN(&rv, *s);
 #endif
 
-  // taint the remaining string's bytes
-  dfsan_set_label(m_label, p_s, strlen(p_s));
   // taint the remaining string's pointer
   char **pp_s = &p_s;
-  dfsan_set_label(j_label, &pp_s, sizeof(&p_s));
+  char **pp_s_base = pp_s;
+  dfsan_set_label(n_label, &pp_s, sizeof(&pp_s));
 
   rv = strsep(pp_s, p_delim);
 
   assert(rv == &base[6]);
-#ifdef STRICT_DATA_DEPENDENCIES
-  ASSERT_READ_LABEL(rv, strlen(rv), m_label);
-  ASSERT_LABEL(rv, j_label);
-  ASSERT_INIT_ORIGIN_EQ_ORIGIN(&rv, pp_s);
-#else
-  ASSERT_LABEL(
-      rv, dfsan_union(j_label,
-                      dfsan_union(i_label, dfsan_union(m_label, n_label))));
-  ASSERT_INIT_ORIGIN_EQ_ORIGIN(&rv, base[6]);
-#endif
-
-  free(s);
-  s = strdup("Hello world/");
-  base = s;
-  free(delim);
-  delim = strdup(" /");
-  p_delim = delim;
-
-  dfsan_set_label(j_label, &delim[0], 1);
-
-  rv = strsep(&s, delim);
-  assert(rv == &base[0]);
 #ifdef STRICT_DATA_DEPENDENCIES
   ASSERT_ZERO_LABEL(rv);
+  ASSERT_ZERO_ORIGIN(rv);
 #else
-  ASSERT_LABEL(rv, j_label);
-  ASSERT_INIT_ORIGIN_EQ_ORIGIN(&rv, delim[1]);
-#endif
-
-  char *ps = s;
-  pp_s = &ps;
-  dfsan_set_label(i_label, &pp_s, sizeof(&pp_s));
-  dfsan_set_label(i_label, ps, strlen(ps));
-  dfsan_set_label(dfsan_union(j_label, dfsan_read_label(ps, strlen(ps))), ps,
-                  strlen(ps));
-  rv = strsep(pp_s, " /");
-  assert(rv == &base[6]);
-#ifdef STRICT_DATA_DEPENDENCIES
-  ASSERT_LABEL(rv, i_label);
-#else
-  ASSERT_LABEL(rv, i_j_label);
-  ASSERT_INIT_ORIGIN_EQ_ORIGIN(&rv, base[6]);
-#endif
-  rv = strsep(&ps, " /");
-  assert(strlen(rv) == 0);
-#ifdef STRICT_DATA_DEPENDENCIES
-  ASSERT_ZERO_LABEL(ps);
-#else
-  ASSERT_ZERO_LABEL(rv);
-  ASSERT_INIT_ORIGIN_EQ_ORIGIN(&rv, 0);
-
+  ASSERT_LABEL(rv, dfsan_union(i_label, dfsan_union(j_label, n_label)));
+  ASSERT_INIT_ORIGIN_EQ_ORIGIN(&rv, *p_delim);
 #endif
 }
 
Index: compiler-rt/lib/dfsan/dfsan_custom.cpp
===================================================================
--- compiler-rt/lib/dfsan/dfsan_custom.cpp
+++ compiler-rt/lib/dfsan/dfsan_custom.cpp
@@ -218,11 +218,10 @@
   }
 
   if (flags().strict_data_dependencies) {
-    *ret_label = res ? s_label : 0;
+    *ret_label = res ? dfsan_read_label(base, sizeof(base)) : 0;
   } else {
-    size_t s_bytes_read = (res ? strlen(res) : strlen(base)) + 1;
     *ret_label =
-        dfsan_union(dfsan_read_label(base, s_bytes_read),
+        dfsan_union(dfsan_read_label(base, sizeof(base)),
                     dfsan_union(dfsan_read_label(delim, strlen(delim) + 1),
                                 dfsan_union(s_label, delim_label)));
   }
@@ -238,11 +237,10 @@
   char *res = __dfsw_strsep(s, delim, s_label, delim_label, ret_label);
   if (flags().strict_data_dependencies) {
     if (res)
-      *ret_origin = s_origin;
+      *ret_origin = dfsan_read_origin_of_first_taint(base, strlen(base));
   } else {
     if (*ret_label) {
-      size_t s_bytes_read = (res ? strlen(res) : strlen(base)) + 1;
-      dfsan_origin o = dfsan_read_origin_of_first_taint(base, s_bytes_read);
+      dfsan_origin o = dfsan_read_origin_of_first_taint(base, strlen(base));
       if (o) {
         *ret_origin = o;
       } else {
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to