[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] pkl: Fix bug of handling %% in format strings
From: |
Mohammad-Reza Nabipoor |
Subject: |
[PATCH] pkl: Fix bug of handling %% in format strings |
Date: |
Sat, 26 Feb 2022 02:56:47 +0330 |
2022-02-26 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
* libpoke/pkl-trans.c (pkl_trans1_ps_format): Fix format string
arg suffix when there's a %%.
* testsuite/poke.pkl/format-40.pk: New test.
* testsuite/poke.pkl/format-41.pk: Likewise.
* testsuite/poke.pkl/format-42.pk: Likewise.
* testsuite/Makefile.am (EXTRA_DIST): Update.
---
ChangeLog | 9 +++++++++
libpoke/pkl-trans.c | 12 +++++++++++-
testsuite/Makefile.am | 3 +++
testsuite/poke.pkl/format-40.pk | 5 +++++
testsuite/poke.pkl/format-41.pk | 5 +++++
testsuite/poke.pkl/format-42.pk | 5 +++++
6 files changed, 38 insertions(+), 1 deletion(-)
create mode 100644 testsuite/poke.pkl/format-40.pk
create mode 100644 testsuite/poke.pkl/format-41.pk
create mode 100644 testsuite/poke.pkl/format-42.pk
diff --git a/ChangeLog b/ChangeLog
index 7ecaa488..d472da8d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2022-02-26 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
+
+ * libpoke/pkl-trans.c (pkl_trans1_ps_format): Fix format string
+ arg suffix when there's a %%.
+ * testsuite/poke.pkl/format-40.pk: New test.
+ * testsuite/poke.pkl/format-41.pk: Likewise.
+ * testsuite/poke.pkl/format-42.pk: Likewise.
+ * testsuite/Makefile.am (EXTRA_DIST): Update.
+
2022-02-24 Jose E. Marchesi <jemarch@gnu.org>
* maps/Makefile.am: Revert last change.
diff --git a/libpoke/pkl-trans.c b/libpoke/pkl-trans.c
index eb09c351..91d30a14 100644
--- a/libpoke/pkl-trans.c
+++ b/libpoke/pkl-trans.c
@@ -977,7 +977,17 @@ PKL_PHASE_BEGIN_HANDLER (pkl_trans1_ps_format)
if (*p != '\0' && *p != '%')
{
char *end = strchrnul (p, '%');
- PKL_AST_FORMAT_ARG_SUFFIX (arg) = strndup (p, end - p);
+ if (PKL_AST_FORMAT_ARG_SUFFIX (arg))
+ {
+ char* s = NULL;
+
+ if (asprintf(&s, "%s%.*s", PKL_AST_FORMAT_ARG_SUFFIX (arg),
+ (int)(end - p), p) == -1)
+ PKL_ICE (PKL_AST_LOC (format), _("out of memory"));
+ PKL_AST_FORMAT_ARG_SUFFIX (arg) = s;
+ }
+ else
+ PKL_AST_FORMAT_ARG_SUFFIX (arg) = strndup (p, end - p);
if (!PKL_AST_FORMAT_ARG_SUFFIX (arg))
PKL_ICE (PKL_AST_LOC (format), _("out of memory"));
p = end;
diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
index cc6c1777..5be6b388 100644
--- a/testsuite/Makefile.am
+++ b/testsuite/Makefile.am
@@ -1243,6 +1243,9 @@ EXTRA_DIST = \
poke.pkl/format-37.pk \
poke.pkl/format-38.pk \
poke.pkl/format-39.pk \
+ poke.pkl/format-40.pk \
+ poke.pkl/format-41.pk \
+ poke.pkl/format-42.pk \
poke.pkl/format-diag-1.pk \
poke.pkl/formfeedchar.pk \
poke.pkl/fun-types-1.pk \
diff --git a/testsuite/poke.pkl/format-40.pk b/testsuite/poke.pkl/format-40.pk
new file mode 100644
index 00000000..079c2304
--- /dev/null
+++ b/testsuite/poke.pkl/format-40.pk
@@ -0,0 +1,5 @@
+/* { dg-do run } */
+
+/* { dg-command {.set obase 10} } */
+/* { dg-command {format("%%v")} } */
+/* { dg-output {"%v"} } */
diff --git a/testsuite/poke.pkl/format-41.pk b/testsuite/poke.pkl/format-41.pk
new file mode 100644
index 00000000..85d72a5e
--- /dev/null
+++ b/testsuite/poke.pkl/format-41.pk
@@ -0,0 +1,5 @@
+/* { dg-do run } */
+
+/* { dg-command {.set obase 10} } */
+/* { dg-command {format("v%%j")} } */
+/* { dg-output {"v%j"} } */
diff --git a/testsuite/poke.pkl/format-42.pk b/testsuite/poke.pkl/format-42.pk
new file mode 100644
index 00000000..2a535a59
--- /dev/null
+++ b/testsuite/poke.pkl/format-42.pk
@@ -0,0 +1,5 @@
+/* { dg-do run } */
+
+/* { dg-command {.set obase 10} } */
+/* { dg-command {format("v%%%%j%%abc%%")} } */
+/* { dg-output {"v%%j%abc%"} } */
--
2.35.1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] pkl: Fix bug of handling %% in format strings,
Mohammad-Reza Nabipoor <=