[DTrace-devel] [PATCH v2 4/7] trace: handle the empty string in a sensible way
Eugene Loh
eugene.loh at oracle.com
Thu Aug 14 20:54:29 UTC 2025
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
On 8/14/25 16:33, Kris Van Hees wrote:
> The trace("") action would dump a series of 0x00 bytes (strsize of
> them) rather than printing an empty string. While that is the legacy
> behaviour, it does not really make any sense to do so. The trace
> action is described as printing data as a string if possible, and a
> block of 0-bytes can certainly be printed as an empty string.
>
> Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
> libdtrace/dt_consume.c | 2 +-
> test/unittest/actions/trace/tst.str-empty.d | 18 ++++++++++++++++++
> test/unittest/actions/trace/tst.str-empty.r | 5 +++++
> 3 files changed, 24 insertions(+), 1 deletion(-)
> create mode 100644 test/unittest/actions/trace/tst.str-empty.d
> create mode 100644 test/unittest/actions/trace/tst.str-empty.r
>
> diff --git a/libdtrace/dt_consume.c b/libdtrace/dt_consume.c
> index edfe5bbae..2dce69d6d 100644
> --- a/libdtrace/dt_consume.c
> +++ b/libdtrace/dt_consume.c
> @@ -991,7 +991,7 @@ dt_print_bytes(dtrace_hdl_t *dtp, FILE *fp, caddr_t addr,
> c[i] == '\b' || c[i] == '\a')
> continue;
>
> - if (c[i] == '\0' && i > 0) {
> + if (c[i] == '\0') {
> /*
> * This looks like it might be a string. Before we
> * assume that it is indeed a string, check the
> diff --git a/test/unittest/actions/trace/tst.str-empty.d b/test/unittest/actions/trace/tst.str-empty.d
> new file mode 100644
> index 000000000..38fcb8857
> --- /dev/null
> +++ b/test/unittest/actions/trace/tst.str-empty.d
> @@ -0,0 +1,18 @@
> +/*
> + * Oracle Linux DTrace.
> + * Copyright (c) 2025, 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.
> + */
> +
> +/*
> + * ASSERTION: The trace() action prints an empty string value correctly.
> + *
> + * SECTION: Actions and Subroutines/trace()
> + */
> +
> +BEGIN
> +{
> + trace("");
> + exit(0);
> +}
> diff --git a/test/unittest/actions/trace/tst.str-empty.r b/test/unittest/actions/trace/tst.str-empty.r
> new file mode 100644
> index 000000000..8c15aa7f5
> --- /dev/null
> +++ b/test/unittest/actions/trace/tst.str-empty.r
> @@ -0,0 +1,5 @@
> + FUNCTION:NAME
> + :BEGIN
> +
> +-- @@stderr --
> +dtrace: script 'test/unittest/actions/trace/tst.str-empty.d' matched 1 probe
More information about the DTrace-devel
mailing list