[DTrace-devel] [PATCH] Fix tstring free in string comparisons
eugene.loh at oracle.com
eugene.loh at oracle.com
Thu Oct 14 11:04:18 PDT 2021
From: Eugene Loh <eugene.loh at oracle.com>
Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
libdtrace/dt_cg.c | 6 ++++--
test/unittest/codegen/tst.tstring_free.d | 18 ++++++++++++++++++
test/unittest/codegen/tst.tstring_free.r | 1 +
3 files changed, 23 insertions(+), 2 deletions(-)
create mode 100644 test/unittest/codegen/tst.tstring_free.d
create mode 100644 test/unittest/codegen/tst.tstring_free.r
diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index 5d9fb26f..3cf4cee4 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -2766,9 +2766,11 @@ dt_cg_compare_op(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp, uint_t op)
dt_cg_tstring_xfree(yypcb, off1);
dt_cg_tstring_xfree(yypcb, off2);
- if (dnp->dn_left->dn_tstring)
+ if (dnp->dn_left->dn_kind == DT_NODE_FUNC &&
+ dnp->dn_left->dn_tstring)
dt_cg_tstring_free(yypcb, dnp->dn_left);
- if (dnp->dn_right->dn_tstring)
+ if (dnp->dn_right->dn_kind == DT_NODE_FUNC &&
+ dnp->dn_right->dn_tstring)
dt_cg_tstring_free(yypcb, dnp->dn_right);
/* proceed with the comparison */
diff --git a/test/unittest/codegen/tst.tstring_free.d b/test/unittest/codegen/tst.tstring_free.d
new file mode 100644
index 00000000..65b3b0f2
--- /dev/null
+++ b/test/unittest/codegen/tst.tstring_free.d
@@ -0,0 +1,18 @@
+/*
+ * Oracle Linux DTrace.
+ * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved.
+ * Licensed under the Universal Permissive License v 1.0 as shown at
+ * http://oss.oracle.com/licenses/upl.
+ */
+
+/*
+ * Stress test some tstring-free cases.
+ */
+
+#pragma D option quiet
+
+BEGIN {
+ trace((x = substr("abcdef", 2)) == NULL ? 0 : 1);
+ trace((x = strjoin("abc", "def")) == NULL ? 0 : 1);
+ exit(0);
+}
diff --git a/test/unittest/codegen/tst.tstring_free.r b/test/unittest/codegen/tst.tstring_free.r
new file mode 100644
index 00000000..b4de3947
--- /dev/null
+++ b/test/unittest/codegen/tst.tstring_free.r
@@ -0,0 +1 @@
+11
--
2.18.4
More information about the DTrace-devel
mailing list