From:             [EMAIL PROTECTED]
Operating system: Linux 6.1 kernel 2.2.12-20 on an i686
PHP version:      4.0.4pl1
PHP Bug Type:     Scripting Engine problem
Bug description:  Invalid server response from syntax error

Apache/1.3.19

In the switch block, the following code generates an invalid server response:
      case "":
        if($var) {
echo "FALSE";
            return $ret;
} echo "TRUE";
        else {
            return !$ret;
}



included file named parse.php, an advanced template parser, contains the following 
function:

Typical input to the function would be:
iftest("if", "cats")
iftest("else");
iftest("ifnot", "cats!=4")
iftest("elseif", "homepage==domain+'index.php'")

the dehash function parses variables as they are passed to the template. e.g., 
homepage=>'http://www.php.net/index.php', domain=>'http://www.php.net/', so the last 
example would return true.

function iftest($func,$arg) {
    global $var_hash;

    $var="";
    $op="";
    $val="";
    $i=0;

    if($func=="else") {
        return TRUE;
    }

    do {
        $var.=$arg[$i++];
    } 
while($i<strlen($arg)&&$arg[$i]!="="&&$arg[$i]!="!"&&$arg[$i]!="<"&&$arg[$i]!=">");
    if($i<strlen($arg)) {
        do {
            $op.=$arg[$i++];
        } 
while(($arg[$i]=="="||$arg[$i]=="!"||$arg[$i]=="<"||$arg[$i]==">")&&$i<strlen($arg));
    }
    if($i<strlen($arg)) {
        do {
            $val.=$arg[$i++];
        } while($i<strlen($arg));
    }

    if($val[0]=='"'||$val[0]=="'") {
        $val=substr($val, 1, strlen($val)-2);
    }

    $var=dehash($var);

    if($func=="if"||$func=="elseif") {
        $ret=TRUE;
    }
    elseif($func=="ifnot"||$func="elseifnot") {
        $ret=FALSE;
    }

    switch($op) {
      case "==":
        if($var==$val)
            return $ret;
        else
            return !$ret;
        break;
      case "!=":
        if($var!=$val)
            return $ret;
        else
            return !$ret;
        break;
      case ">=":
        if($var>=$val)
            return $ret;
        else
            return !$ret;
        break;
      case "<=":
        if($var<=$val)
            return $ret;
        else
            return !$ret;
        break;
      case ">":
        if($var>$val)
            return $ret;
        else
            return !$ret;
        break;
      case "<":
        if($var<$val)
            return $ret;
        else
            return !$ret;
        break;
      case "":
        if($var) {
echo "FALSE";
            return $ret;
} echo "TRUE";
        else {
            return !$ret;
}
        break;
      default:
        return FALSE;
    }

    return FALSE;
}


-- 
Edit Bug report at: http://bugs.php.net/?id=10446&edit=1



-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to