string_helpers: Escape double quotes in escape_special
From an abstract point of view, escape_special's counterpart,
unescape_special, already handles the unescaping of blackslashed double
quote sequences.
As a more practical example, printk indexing is an example case where
this is already practically useful. Compare an example with
`ESCAPE_SPECIAL | ESCAPE_SPACE`, with quotes not escaped:
[root@ktst ~]# grep drivers/pci/pci-stub.c:69 /sys/kernel/debug/printk/index/vmlinux
<4> drivers/pci/pci-stub.c:69 pci_stub_init "pci-stub: invalid ID string "%s"\n"
...and the same after this patch:
[root@ktst ~]# grep drivers/pci/pci-stub.c:69 /sys/kernel/debug/printk/index/vmlinux
<4> drivers/pci/pci-stub.c:69 pci_stub_init "pci-stub: invalid ID string \"%s\"\n"
One can of course, alternatively, use ESCAPE_APPEND with a quote in
@only, but without this patch quotes are coerced into hex or octal which
can hurt readability quite significantly.
I've checked uses of ESCAPE_SPECIAL and %pE across the codebase, and I'm
pretty confident that this shouldn't affect any stable interfaces.
Signed-off-by: Chris Down <chris@chrisdown.name>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
Link: https://lore.kernel.org/r/af144c5b75e41ce417386253ba2694456bc04118.1623775748.git.chris@chrisdown.name
This commit is contained in:
@@ -361,6 +361,9 @@ static bool escape_special(unsigned char c, char **dst, char *end)
|
||||
case '\e':
|
||||
to = 'e';
|
||||
break;
|
||||
case '"':
|
||||
to = '"';
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -474,6 +477,7 @@ static bool escape_hex(unsigned char c, char **dst, char *end)
|
||||
* '\t' - horizontal tab
|
||||
* '\v' - vertical tab
|
||||
* %ESCAPE_SPECIAL:
|
||||
* '\"' - double quote
|
||||
* '\\' - backslash
|
||||
* '\a' - alert (BEL)
|
||||
* '\e' - escape
|
||||
|
||||
Reference in New Issue
Block a user