Index | Thread | Search

From:
Christian Ludwig <cludwig@genua.de>
Subject:
btrace: Fix '%c' format string specifier
To:
<tech@openbsd.org>
Date:
Thu, 5 Sep 2024 21:28:33 +0200

Download raw body.

Thread
  • Christian Ludwig:

    btrace: Fix '%c' format string specifier

Hi,

the '%c' format string specifier handles integer literals, not strings.

So long,


  - Christian

---
 regress/usr.sbin/btrace/Makefile     | 4 ++--
 regress/usr.sbin/btrace/multismts.bt | 2 +-
 regress/usr.sbin/btrace/printf.bt    | 4 ++++
 regress/usr.sbin/btrace/printf.ok    | 1 +
 usr.sbin/btrace/printf.c             | 2 +-
 5 files changed, 9 insertions(+), 4 deletions(-)
 create mode 100644 regress/usr.sbin/btrace/printf.bt
 create mode 100644 regress/usr.sbin/btrace/printf.ok

diff --git a/regress/usr.sbin/btrace/Makefile b/regress/usr.sbin/btrace/Makefile
index fb0a37bfc4e9..a7350fb94b72 100644
--- a/regress/usr.sbin/btrace/Makefile
+++ b/regress/usr.sbin/btrace/Makefile
@@ -8,8 +8,8 @@ BT_LANG_SCRIPTS=	arithm beginend beginend-argn boolean comments \
 			delete exit histempty if \
 			map mapclear mapempty mapsyntax mapzero map-unnamed \
 			maxoperand min+max+sum multismts nsecs+var \
-			precedence print read-map-after-clear staticv-empty \
-			syntaxerror tuple tupleeval vareval
+			precedence print printf read-map-after-clear \
+			staticv-empty syntaxerror tuple tupleeval vareval
 
 BT_ARG_LANG_SCRIPTS=	staticv str
 
diff --git a/regress/usr.sbin/btrace/multismts.bt b/regress/usr.sbin/btrace/multismts.bt
index 74eaa4986763..67fbf7befa1b 100644
--- a/regress/usr.sbin/btrace/multismts.bt
+++ b/regress/usr.sbin/btrace/multismts.bt
@@ -1,5 +1,5 @@
 // Test multiple statements inside a single block;
 BEGIN {
 	printf("One"); printf(", %d", "2");
-	printf(" %s three%c\n", "and", "!");
+	printf(" %s three!\n", "and");
 }
diff --git a/regress/usr.sbin/btrace/printf.bt b/regress/usr.sbin/btrace/printf.bt
new file mode 100644
index 000000000000..f025d0bbc27a
--- /dev/null
+++ b/regress/usr.sbin/btrace/printf.bt
@@ -0,0 +1,4 @@
+BEGIN {
+	$c = 0x41; // 'A'
+	printf("%c%c%c\n", $c, 0x41, 65);
+}
diff --git a/regress/usr.sbin/btrace/printf.ok b/regress/usr.sbin/btrace/printf.ok
new file mode 100644
index 000000000000..43d5a8ed6ef6
--- /dev/null
+++ b/regress/usr.sbin/btrace/printf.ok
@@ -0,0 +1 @@
+AAA
diff --git a/usr.sbin/btrace/printf.c b/usr.sbin/btrace/printf.c
index d7a9424dce61..3914b577b8fb 100644
--- a/usr.sbin/btrace/printf.c
+++ b/usr.sbin/btrace/printf.c
@@ -400,7 +400,7 @@ getchr(void)
 	if (gargv == NULL)
 		return((int)'\0');
 
-	c = (int)*ba2str(gargv, gdevt);
+	c = ba2long(gargv, gdevt);
 	gargv = SLIST_NEXT(gargv, ba_next);
 	return c;
 }
-- 
2.34.1