]> git.plutz.net Git - cgilite/blobdiff - cgilite.sh
bugfix: prevent endless loop in HEX_DECODE, copy non-hex-digits unchanged
[cgilite] / cgilite.sh
index b47a3e2e683219b773af4383059a6701f2d44d46..b915a8fb83e4971817ad98ba0818d2a15635bfaa 100755 (executable)
@@ -85,6 +85,12 @@ HEX_DECODE(){
   # will be copied to the output literally
 
   while [ "$in" ]; do
+    [ "$pfx" ] || case $in in
+      [0-9a-fA-F][0-9a-fA-F]*):;;
+      ?*) out="${out}${in%%"${in#?}"}"
+          in="${in#?}"; continue;;
+    esac
+
     case $in in
       "$pfx"[0-9a-fA-F][0-9a-fA-F]*) in="${in#${pfx}}";;
       \\*) in="${in#?}"; out="${out}\\\\"; continue;;
@@ -264,7 +270,7 @@ HEADER(){
     str="${str#*${BR}${1}: }"
     printf %s "${str%%${BR}*}"
   else
-    local var="HTTP_$(printf %s "$1" |tr a-z- A-Z-)"
+    local var="HTTP_$(printf %s "$1" |tr a-z- A-Z_)"
     eval "[ \"\$$var\" ] && printf %s \"\$$var\" || return 1"
     # eval "printf %s \"\$HTTP_$(printf %s "${1}" |tr a-z A-Z |tr -c A-Z _)\""
   fi
@@ -294,7 +300,7 @@ HTML(){
     \]*) out="${out}]";      str="${str#?}";;
     "${CR}"*) out="${out}
"; str="${str#?}";;
     "${BR}"*) out="${out}
"; str="${str#?}";;
-    *) out="${out}${str%%[]&<>\"\'[]*}"; str="${str#"${str%%[]&<>\"\'[]*}"}";;
+    *) out="${out}${str%%[]&<>\"\'${CR}${BR}[]*}"; str="${str#"${str%%[]&<>\"\'${CR}${BR}[]*}"}";;
   esac; done
   printf %s "$out"
 }