From d214859aadb31a565718da69754ad2573fa3f917 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Tue, 17 Jul 2018 22:04:02 +0200 Subject: [PATCH 1/1] dual use string functions (argument and pipe), make scripts of sed based functions available in variable --- cgilite.sh | 6 +++--- storage.sh | 42 +++++++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/cgilite.sh b/cgilite.sh index 9420b46..e1b3480 100755 --- a/cgilite.sh +++ b/cgilite.sh @@ -145,7 +145,7 @@ HTML(){ # HTML Entity Coding # Prints UTF-8 string as decimal Unicode Code Points # Useful for escaping user input for use in HTML text and attributes - printf %s "$*" \ + { [ $# -eq 0 ] && cat || printf %s "$*"; } \ | hexdump -ve '/1 "%03o\n"' \ | while read n; do case $n in @@ -168,13 +168,13 @@ URL(){ # Code every character in URL escape hex format # except alphanumeric ascii - printf %s "$*" \ + { [ $# -eq 0 ] && cat || printf %s "$*"; } \ | hexdump -v -e '/1 ",%02X"' \ | sed 's;,;%;g; s;%2F;/;g;' } PATH(){ - printf %s "$1" \ + { [ $# -eq 0 ] && cat || printf %s "$*"; } \ | sed -r 's;^.*$;/&/;; s;/+;/;g; :X; s;^/\.\./;/;; s;/\./;/;g; diff --git a/storage.sh b/storage.sh index a6b6b43..fd75820 100755 --- a/storage.sh +++ b/storage.sh @@ -63,27 +63,31 @@ RELEASE(){ fi } +STRING=' + s;\\;\\\\;g; + s;\n;\\n;g; + s;\t;\\t;g; + s;\r;\\r;g; + s;\+;\\+;g; + s; ;+;g; +' + STRING(){ - printf %s "$*" |sed -r ' - :X; $!{N;bX;} - s;\\;\\\\;g; - s;\n;\\n;g; - s;\t;\\t;g; - s;\r;\\r;g; - s;\+;\\+;g; - s; ;+;g; - ' + { [ $# -eq 0 ] && cat || printf %s "$*"; } \ + | printf %s "$*" |sed -r ':X; $!{N;bX;}'"$STRING" } +UNSTRING=' + :UNSTRING_X + s;((^|[^\\])(\\\\)*)\\n;\1\n;g; + s;((^|[^\\])(\\\\)*)\\t;\1\t;g; + s;((^|[^\\])(\\\\)*)\\r;\1\r;g; + s;((^|[^\\])(\\\\)*)\+;\1 ;g; + tUNSTRING_X; + s;((^|[^\\])(\\\\)*)\\\+;\1+;g; + s;\\\\;\\;g; +' UNSTRING(){ - printf %s "$*" |sed -r ' - :X - s;((^|[^\\])(\\\\)*)\\n;\1\n;g; - s;((^|[^\\])(\\\\)*)\\t;\1\t;g; - s;((^|[^\\])(\\\\)*)\\r;\1\r;g; - s;((^|[^\\])(\\\\)*)\+;\1 ;g; - tX; - s;((^|[^\\])(\\\\)*)\\\+;\1+;g; - s;\\\\;\\;g; - ' + { [ $# -eq 0 ] && cat || printf %s "$*"; } \ + | sed -r "$UNSTRING" } -- 2.39.2