X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=cgi.sh;h=7b5651af6eec81d3f9720bfd9227b03ac626960e;hb=08115e215b65dcc25f997aaa1be72db2f15adca2;hp=7ff73d0ca4c8effe4b1df85c851b38d3e902f6ec;hpb=3c2a130cdaeadf1a67eb37ab70a298fa756a3c01;p=shcgi diff --git a/cgi.sh b/cgi.sh index 7ff73d0..7b5651a 100755 --- a/cgi.sh +++ b/cgi.sh @@ -17,6 +17,7 @@ # You should have received a copy of the GNU Affero General Public License # along with shcgi. If not, see . +unset _GET _POST _REF _COOKIE declare -A _GET declare -A _POST declare -A _REF @@ -33,10 +34,18 @@ printf '%s\n' "$QUERY_STRING" |tr '&' '\n' |while read query; do debug "_GET[$key] => $val" done -if [ "$REQUEST_METHOD" = POST ]; then +if [ "$REQUEST_METHOD" = POST -a "$HTTP_CONTENT_LENGTH" -gt 0 ]; then # parse HTTP POST string debug "== CGI DATA: POST ==" - sed -u 1q |tr '&' '\n' |while read query; do + head -c "$HTTP_CONTENT_LENGTH" \ + | sed -un ' + 2q + 1{ + s;&;\n;g; + a + p + }' \ + | while read query; do key="$(printf %s "$query" |sed -r 's:^([\.a-zA-Z0-9_-]+)=(.*)$:\1:')" val="$(printf %s "$query" |sed -r 's:^([\.a-zA-Z0-9_-]+)=(.*)$:\2:')" value="$(printf "$(printf %s "$val" |sed 's:+: :g;s:\\:\\\\:g;s:%:\\x:g;')")"