X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=cgilite.sh;h=b915a8fb83e4971817ad98ba0818d2a15635bfaa;hb=d61539cdd435eb812053104ab5a12700607732be;hp=7af962332cde39d1a4f0583da271159f8281f475;hpb=6cc62de8c3909174b18d2a294cfaab70a0386799;p=cgilite diff --git a/cgilite.sh b/cgilite.sh index 7af9623..b915a8f 100755 --- a/cgilite.sh +++ b/cgilite.sh @@ -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;; @@ -164,7 +170,7 @@ if [ -z "$REQUEST_METHOD" ]; then done export REMOTE_ADDR SERVER_NAME SERVER_PORT REQUEST_METHOD REQUEST_URI SERVER_PROTOCOL \ - PATH_INFO QUERY_STRING CONTENT_TYPE CONTENT_LENGTH + PATH_INFO QUERY_STRING CONTENT_TYPE CONTENT_LENGTH cgilite_headers # Try to serve multiple requests, provided that script serves a # Content-Length header. @@ -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" }