\n"; echo "\n"; function indent($string, $prefix) { $string = ereg_replace(13, "", $string); /* get rid of Ctrl-M */ return $prefix . ereg_replace("\n", "\n$prefix", $string) . "\n"; } function wrap($text,$margin=72) { $i=0; $last_space=0; $printfrom=0; $len=strlen($text); $line_len=0; while($i<$len) { if($text[$i]==chr(32) || $text[$i]==chr(7)) { $last_space=$i; $line_len++; } else if($text[$i]==chr(10) || $text[$i]==chr(13)) { $line_len=0; } else { $line_len++; } if($line_len>$margin) { if($last_space==0 || $last_space<$printfrom) { echo substr($text,$printfrom,$margin); echo "\n"; $printfrom+=$margin+1; } else { echo substr($text,$printfrom,$last_space-$printfrom); echo "\n"; $printfrom=$last_space+1; } $line_len=0; } $i++; } echo substr($text,$printfrom); } function list_ids($current) { global $dbhost,$dbuser,$dbpwd; mysql_connect($dbhost,$dbuser,$dbpwd) or die("Unable to connect to SQL server."); $result = mysql_db_query('php3', "select distinct dev_id from bugdb where dev_id not like '%@%' and dev_id not like '%.%' and php_version like '4%' order by dev_id"); if($current) echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; if (isset($MAGIC_COOKIE)) echo "\n"; else echo "\n"; echo "
bugs of type: "; show_types($bug_type,1,"bug_type"); $fields = array( "id" => "Bug ID", "bug_type" => "Bug Type", "email" => "Email address", "sdesc" => "Short Description", "ldesc" => "Long Description", "php_version" => "PHP Version", "php_os" => "Platform", "status" => "Status", "comments" => "Comments", "ts1" => "Opened", "assign" => "Assigned To"); reset($fields); echo "Last Comment By:
Search for: in the bug database
\n"; echo " bug number:
Statistics
"; echo "Feature/Change requests must be explicitly selected to be shown\n"; } ### show_types significantly modified by j.a.greant 00/09/05 function show_types($first_item,$show_any,$var_name) { $items = array ("Any" => "Any", "*General Issues" => "General Issues", "Feature/Change Request" => "    Feature/Change Request", "Documentation problem" => "    Documentation problem", "Reproduceable crash" => "    Reproduceable crash", "Scripting Engine problem" => "    Scripting Engine problem", "Performance problem" => "    Performance problem", "*Install and Config" => "Install and Config", "Compile Problem" => "    Compile Problem", "Compile Failure" => "         Compile Failure", "Compile Warning" => "         Compile Warning", "*Web Server problem" => "    Web Server problem", "Apache related" => "         Apache related", "IIS related" => "         IIS related", "iPlanet related" => "         iPlanet related", "PWS related" => "         PWS related", "Other web server" => "         Other web server", "*Configuration Issues" => "    Configuration Issues", "Dynamic loading" => "         Dynamic loading", "PHP options/info functions" => "         PHP options/info functions", "*Function Specific" => "Function Specific", "Calendar problems" => "    Calendar problems", "Calendar related" => "         Calendar related", "ICAP related" => "         ICAP related", "MCAL related" => "         MCAL related", "*Compression related" => "    Compression related", "Bzip2 Related" => "         Bzip2 Related", "ZZiplib Related" => "         ZZiplib Related", "Zlib Related" => "         Zlib Related", "Date/time related" => "    Date/time related", "*Directory/Filesystem functions" => "    Directory/Filesystem functions", "Directory function related" => "         Directory function related", "Filesystem function related" => "         Filesystem function related", "*Directory Services problems" => "    Directory Services problems", "YP/NIS related" => "         YP/NIS related", "LDAP related" => "         LDAP related", "*Database Functions" => "    Database Functions", "Adabas-D related" => "         Adabas-D related", "dBase related" => "         dBase related", "DBM/DBA related" => "         DBM/DBA related", "DBX related" => "         DBX related", "filePro related" => "         filePro related", "FrontBase related" => "         FrontBase related", "Hyperwave related" => "         Hyperwave related", "Informix related" => "         Informix related", "InterBase related" => "         InterBase related", "Sybase-ct (ctlib) related" => "         Sybase-ct (ctlib) related", "Sybase (dblib) related" => "         Sybase (dblib) related", "mSQL related" => "         mSQL related", "MSSQL related" => "         MSSQL related", "MySQL related" => "         MySQL related", "OCI8 related" => "         OCI8 related", "ODBC related" => "         ODBC related", "Oracle related" => "         Oracle related", "Ovrimos related" => "         Ovrimos related", "PostgreSQL related" => "         PostgreSQL related", "Solid related" => "         Solid related", "*Data Exchange functions" => "    Data Exchange functions", "WDDX related" => "         WDDX related", "YAZ related" => "         YAZ related", "*Extensibility Functions" => "    Extensibility Functions", "Java related" => "         Java related", "COM related" => "         COM related", "Program Execution" => "         Program Execution", "Semaphore related" => "         Semaphore related", "Readline related" => "         Readline related", "Satellite CORBA related" => "        Satellite CORBA related", "*E-commerce functions" => "    E-commerce functions", "Cybercash related" => "         Cybercash related", "Verisign Payflow Pro related" => "         Verisign Payflow Pro related", "CCVS related" => "         CCVS related", "FrontPage related" => "    FrontPage related", "*Graphics related" => "    Graphics related", "GD related" => "         GD related", "GetImageSize related" => "         GetImageSize related", "*Languages/Translation" => "    Languages/Translation", "Gettext related" => "         Gettext related", "Recode related" => "         Recode related", "*Mail Related" => "    Mail Related", "IMAP related" => "         IMAP related", "Mail related" => "         Mail function related", "*Math Functions" => "    Math Functions", "BC math related" => "         BC math related", "Math related" => "         Math related", "*Encryption and hash functions" => "    Encryption and hash functions", "mcrypt related" => "         mcrypt related", "mhash related" => "         mhash related", "OpenSSL related" => "         OpenSSL related", "*Network Functions" => "    Network Functions", "Network related" => "         Network related", "SNMP related" => "         SNMP related", "FTP related" => "         FTP related", "HTTP related" => "         HTTP related", "Sockets related" => "         Sockets related", "Output Control" => "    Output Control", "*PDF functions" => "    PDF functions", "ClibPDF related" => "         ClibPDF related", "FDF related" => "         FDF related", "PDF related" => "         PDF related", "POSIX related" => "    POSIX related", "*Programming Data Structures" => "    Programming Data Structures", "Class/Object related" => "         Class/Object related", "Arrays related" => "         Arrays related", "Strings related" => "         Strings related", "Variables related" => "         Variables related", "*Regular Expressions" => "    Regular Expressions", "PCRE related" => "         PCRE related", "Regexps related" => "         Regexps related", "*Session related" => "    Session related", "*Spelling functions" => "    Spelling functions", "Aspell related" => "         Aspell related", "Pspell related" => "         Pspell related", "SWF related" => "    SWF related", "*XML functions" => "    XML functions", "DOM XML related" => "         DOM XML related", "XML related" => "         XML related", "Sablotron XSL" => "         Sablotron XSL", "*URL Functions" => "    URL Functions", "cURL related" => "         cURL related", "URL related" => "         URL related", "Unknown/Other Function" => "Unknown/Other Function" ); print "\n"; } function find_password($user) { $fp=@fopen("/repository/CVSROOT/passwd","r"); if (!$fp) { return (""); } while(!feof($fp)) { $line=fgets($fp,120); list($luser,$passwd,$junk) = explode(":",$line); if($user==$luser) { fclose($fp); return($passwd); } } fclose($fp); return(""); } function addlinks($text) { $text = htmlspecialchars($text); $new_text = ereg_replace("(http:[^ \n\t]*)","\\1",$text); $new_text = ereg_replace("(ftp:[^ \n\t]*)","\\1",$text); $new_text = ereg_replace("[.,]-=-\"","\"",$new_text); $new_text = ereg_replace("-=-\"","\"",$new_text); return $new_text; } if (isset($cmd) && $cmd == "Send bug report") { if(!ereg("@",$email)) { echo "ERROR! Please provide a valid email address

\n"; commonFooter(); exit; } if($ebug_type=="--Please Select--") { echo "ERROR! Please select an appropriate bug type

\n"; commonFooter(); exit; } if ($php_version=='earlier') { echo "ERROR! Please select a valid PHP version. If your PHP version is too old, please upgrade first and see if the problem has not already been fixed."; commonFooter(); exit; } show_menu($status); echo "


\n"; mysql_connect($dbhost,$dbuser,$dbpwd) or die("Unable to connect to SQL server."); mysql_select_db("php3"); $ts=date("Y-m-d H:i:s"); $ret = mysql_query("INSERT into bugdb values (0,'$ebug_type','$email','$sdesc','$ldesc','$php_version','$php_os','Open','','$ts','$ts','','','$passwd')"); $cid = mysql_insert_id(); $report = ""; echo("
\n");

    $ldesc = stripslashes($ldesc);
    $sdesc = stripslashes($sdesc);
    $report .= "From:             $email\n";
    $report .= "Operating system: $php_os\n";
    $report .= "PHP version:      $php_version\n";
    $report .= "PHP Bug Type:     $ebug_type\n";
    $report .= "Bug description:  ";
    $html_sdesc = ereg_replace("<", "<", $sdesc);
    $html_sdesc = ereg_replace(">", ">", $html_sdesc);
    $report .= $html_sdesc."\n\n";
	$ascii_report = indent($report.$ldesc,"");
	$ascii_report.= "\n\n-- \nEdit Bug report at: http://bugs.php.net/?id=$cid&edit=1\n\n";
    $html_desc = ereg_replace("<", "<", $ldesc);
    $html_desc = ereg_replace(">", ">", $html_desc);
    $report .= $html_desc."\n";

    $html_report = ereg_replace("<", "<", $report);
    $html_report = ereg_replace(">", ">", $html_report);

    echo wrap($html_report);
    echo("
\n"); if (Mail($destination, "PHP 4.0 Bug #$cid: $sdesc", $ascii_report, "From: $email")) { echo "

Mail sent to $destination...

\n"; echo "Thank you for your help!

"; echo "The password for this report is: ".htmlentities($passwd)."
"; echo "If the status of the bug report you submitted\n"; echo "changes, you will be notified. You may return here and check on the status\n"; echo "or update your report at any time. The URL for your bug report is: "; echo "http://bugs.php.net/?id=$cid\n"; } else { echo("

Mail not sent!

\n"); echo("Please send this page in a mail to " . "$destination manually.\n"); } } elseif(isset($cmd) && $cmd=="Display Bugs") { show_menu($status); echo "
\n"; include("table_wrapper.inc"); function external_processing($fieldname,$tablename,$data,$row){ switch($fieldname) { case "id": print "$data\n"; break; case "Originator": print "$data\n"; break; case "Mod": print "\n"; break; case "Status": if ($data == "Feedback") { echo "Feedback
(".$row[unchanged_days]." days)"; break; } /* otherwise fall through */ default: $data = ereg_replace("<","<",$data); $data = ereg_replace(">",">",$data); print $data; break; } } function row_coloring($row) { if ($row["bug_type"]=="Feature/Change Request") { return "#aaaaaa"; } switch($row["Status"]) { case "Open": return "#ffbbaa"; break; case "Closed": return "#aaffbb"; break; case "Suspended": return "#ffccbb"; break; case "Assigned": return "#bbaaff"; break; case "Feedback": return "#bbeeff"; break; case "Analyzed": return "#99bbaa"; break; case "Duplicate": return "#bbbbbb"; break; default: return "#aaaaaa"; break; } } $external_processing_function="external_processing"; $row_coloring_function="row_coloring"; mysql_connect($dbhost,$dbuser,$dbpwd) or die("Unable to connect to SQL server"); mysql_select_db("php3"); $tables[] = "bugdb"; $fields[] = "id"; $fields[] = "bug_type"; $fields[] = "status as Status"; $fields[] = "assign as Assigned"; $fields[] = "php_version as Version"; $fields[] = "php_os as Platform"; $fields[] = "sdesc as Description"; $fields[] = "id as Mod"; $fields[] = "TO_DAYS(NOW())-TO_DAYS(ts2) as unchanged_days"; $conversion_table["id"] = "ID#"; $conversion_table["bug_type"] = "Bug Type"; $pass_on = ereg_replace(" ","+","&cmd=Display+Bugs&status=$status&bug_type=$bug_type"); $default_header_color="cccccc"; $centering["id"] = $centering["Mod"] = "center"; $dont_link["Mod"]=1; $dont_display["unchanged_days"] = 1; if (!isset($order_by_clause)) { $order_by_clause = "id"; } if($status=="All" && $bug_type=="Any") { $where_clause = "bug_type!='Feature/Change Request'"; /* nothing */ } elseif($status=="All" && $bug_type!="Any") { $where_clause = "bug_type='$bug_type'"; } else { if($bug_type=="Any") { $where_clause = "bug_type!='Feature/Change Request'"; } else { $where_clause = "bug_type='$bug_type'"; } /* Treat assigned and analyzed bugs as open */ if($status=="Open") { $where_clause .= " and (status='Open' or status='Assigned' or status='Analyzed')"; } elseif($status=="OldFeedback") { $where_clause .= " and status='Feedback' and TO_DAYS(NOW())-TO_DAYS(ts2)>60"; } else { $where_clause .= " and status='$status'"; } } if(strlen($search_for)) { $where_clause .= " and (email like '%$search_for%' or sdesc like '%$search_for%' or ldesc like '%$search_for%' or comments like '%$search_for%')"; } // not supported by the HTML form yet : use the URL :) if(isset($bug_age) && ($bug_age!="All")) { $where_clause .= " and ts1 >= date_sub(now(), interval $bug_age day)"; } if (strlen($where_clause)) { $where_clause .= " and"; } $where_clause .= " php_version like '4%'"; if(strlen($by) and $by!='Any') $where_clause .= " and dev_id = '$by' "; table_wrapper(); echo "
Submit a Bug Report
\n"; } else if(!isset($cmd) && isset($id)) { /* Change made by j.a.greant 00/09/03 */ function get_old_comments ($bug_id) { $divider = '---------------------------------------------------------------------------'; $max_message_length = 10 * 1024; #fetch comments $result = mysql_query ("SELECT ts, email, comment from bugdb_comments where bug = $bug_id order by ts desc"); while ($temp = mysql_fetch_row ($result)) # $result should always be valid, suppress error just in case. $comments[] = $temp; if ($comments[0]) unset ($comments[0]); # Ditch the most recent comment #fetch original bug description $query = "SELECT ts1, email, ldesc FROM bugdb WHERE id=$bug_id LIMIT 5"; $result = mysql_query ($query); $comments[] = mysql_fetch_row ($result); $counter = 0; foreach ($comments as $value) { $output .= "[$value[0]] $value[1]\n$value[2]\n\n$divider\n\n"; if (strlen ($output) > $max_message_length || ++$counter > 4 ) { $output .= "The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online.\n"; break; } } if ($output) return "\n\nPrevious Comments:\n$divider\n\n" . $output; } show_menu($status); echo "
\n"; mysql_connect($dbhost,$dbuser,$dbpwd) or die("Unable to connect to SQL server."); mysql_select_db("php3"); /* HANDLE NORMAL DEVELOPER UPDATES */ if(isset($modify) && $modify=="Edit Bug") { $ok=0; if($user!="cvsread") { $psw=find_password($user); if(strlen($psw)>0) { if(crypt($pw,substr($psw,0,2))==$psw) { $ts=date("Y-m-d H:i:s"); $result = mysql_query("select status, bug_type, ldesc, php_version, php_os from bugdb where id=$id"); mysql_query("UPDATE bugdb set sdesc='$esdesc',status='$estatus', bug_type='$ebug_type', assign='$eassign', comments='$comments', ts2='$ts', dev_id='$user', php_version='$ephp_version' where id=$id"); if (!empty($ncomment)) { mysql_query("INSERT INTO bugdb_comments (bug, email, ts, comment) VALUES ($id,'".$user."@php.net','$ts','$ncomment')"); } $ok=1; } } } if(!$ok) { echo "Sorry, incorrect user id/password pair.
\n"; Mail("rasmus@lerdorf.on.ca", "bugdb auth failure for $user/$pw", "", "From: bugdb"); } else { echo "Database updated!
\n"; $row=mysql_fetch_row($result); $text = "ID: $id\nUpdated by: $user\n"; $text.= "Reported By: $eemail\n"; if($estatus!=$row[0]) $text .= "Old-Status: ".$row[0]."\n"; $text.= "Status: $estatus\n"; if($ebug_type != $row[1]) $text .= "Old-Bug Type: ".$row[1]."\n"; $text.= "Bug Type: $ebug_type\n"; $text.= "Assigned To: $eassign\n"; $text.= "Comments:\n\n$ncomment" . get_old_comments ($id); $text.= "\n\nATTENTION! Do NOT reply to this email!\n"; $text.= "To reply, use the web interface found at http://bugs.php.net/?id=$id&edit=2\n"; $text = stripslashes($text); $esdesc = stripslashes($esdesc); /* mail bug originator if status was changed or comment is not empty. */ if($estatus != $row[0] || $ncomment != "") { Mail($eemail, "PHP 4.0 Bug #$id Updated: $esdesc", $text, "From: Bug Database <$destination>"); Mail($destination, "PHP 4.0 Bug #$id Updated: $esdesc", $text, "From: $user@php.net"); } } mysql_freeresult($result); } /* HANDLE USER UPDATES */ if(isset($modify) && $modify=="User Edit Bug") { $ts=date("Y-m-d H:i:s"); $result = mysql_query("select status, bug_type, ldesc, php_version, php_os from bugdb where id=$id and passwd='$pw'"); $ok=mysql_numrows($result); if(!$ok) { echo "Sorry, incorrect password. The entry has not been changed.
\n"; Mail("rasmus@lerdorf.on.ca", "bugdb auth failure for bug #$id - ($pw)", "", "From: bugdb"); } else { $row=mysql_fetch_row($result); /* update bug record */ if($estatus=="Closed" and $row[0]!="Closed") { mysql_query("UPDATE bugdb set status='$estatus', bug_type='$ebug_type', php_version='$ephp_version', php_os='$ephp_os', ts2='$ts', dev_id='$eemail' where id=$id"); } else { mysql_query("UPDATE bugdb set status='$estatus', bug_type='$ebug_type', php_version='$ephp_version', php_os='$ephp_os', ts2='$ts' where id=$id"); } /* add comment */ if (!empty($ncomment)) { mysql_query("INSERT INTO bugdb_comments (bug, email, ts, comment) VALUES ($id,'$eemail','$ts','$ncomment')"); } echo "Database updated!
\n"; $text = "ID: $id\nUser Update by: $eemail\n"; if($estatus!=$row[0]) $text .= "Old-Status: ".$row[0]."\n"; $text .= "Status: $estatus\n"; if($ebug_type != $row[1]) $text .= "Old-Bug Type: ".$row[1]."\n"; $text .= "Bug Type: $ebug_type\n"; $text .= "Description: $esdesc\n\n$ncomment"; $text .= get_old_comments ($id); $text .= "\nFull Bug description available at: http://bugs.php.net/?id=$id\n"; $text = stripslashes($text); $esdesc = stripslashes($esdesc); Mail($eemail, "PHP 4.0 Bug #$id Updated: $esdesc", $text, "From: Bug Database <$destination>"); Mail($destination, "PHP 4.0 Bug #$id Updated: $esdesc", $text, "From: $eemail"); mysql_freeresult($result); } } /* DISPLAY BUG */ $result = mysql_query("SELECT * from bugdb where id=$id"); if($result and mysql_numrows($result)>0) { $row = mysql_fetch_row($result); echo "

Bug id #$id

\n"; echo "\n"; if(!isset($edit)) { echo ""; echo ""; } else { echo "\n"; if($edit==1) { echo "\n"; } else { echo ""; echo "\n"; } echo "\n"; echo "\n"; echo "\n"; if(!isset($edit)) { echo "\n"; } else { echo "\n"; } if(isset($edit) && $edit==2) { echo "\n"; } else { echo "\n"; } if(isset($edit) && ($edit==2 || $edit == 1)) { echo "\n"; } else { echo "\n"; } echo "\n"; $sd = ereg_replace("<","<",$row[3]); $sd = ereg_replace(">",">",$sd); if(isset($edit) && $edit==1) { echo "\n"; } else { echo "\n"; } echo "
Status:".$row[7]."User Modify   "; echo "Dev Modify
Dev Modify
Status:\n"; if($edit==1) { echo "Assign to: \n"; echo "\n"; } } echo "
From:".$row[2].""; echo "
Date:".$row[9]."
Type:".$row[1]."
Type:\n"; show_types($row[1],0,"ebug_type"); echo "
OS:
OS:".$row[6]."
PHP Version:
PHP Version:".$row[5]."
Assigned To:".$row[12]."
Short Desc.:
Short Desc.:$sd
\n"; /* INSERT NEW COMMENT HERE */ if (isset($edit)) { echo "New Comment:
\n"; echo "
\n"; if(isset($MAGIC_COOKIE)) list($user, $pw) = explode(":", base64_decode($MAGIC_COOKIE)); if ($edit == 1) { echo "CVS user id: \n"; } echo "Password: \n"; echo ""; echo ($edit == 2) ? " [Lost your password?]
\n" : "
\n"; if(!$user || !$pw) { echo "Remember my login/password: \n"; } echo "\n"; } echo "
\n"; /* ORIGINAL REPORT */ echo "[".$row[9]."] ".$row[2]."
\n"; $text = addlinks($row[4]); echo "
";
		echo wrap($text,90);
		echo "
\n"; /* OLD-STYLE DEVELOPER COMMENT */ if(strlen($row[8])) { echo "[".$row[10]."] ".$row[11]."
\n"; $text=addlinks($row[8]); echo "
";
			wrap($text,90);
			echo "
\n"; } /* NEW-STYLE COMMENTS */ $query = "SELECT *,UNIX_TIMESTAMP(ts) AS my_when FROM bugdb_comments WHERE bug=$id ORDER BY ts"; if ($comresult = mysql_query($query)) { while ($com = mysql_fetch_array($comresult)) { echo "[".$com['ts']."] ".$com['email']."
\n"; $text = addlinks($com['comment']); echo "
";
				wrap($text,90);
				echo "
\n"; } mysql_freeresult($comresult); } } else { echo "

Sorry bug id #$id does not exist

\n"; } if ($result) { mysql_freeresult($result); } } else { show_menu($status); ?> Or use the form below to submit a new bug report.

Please read the Dos & Don'ts before submitting a bug report!

To report bugs in PHP 3.0, please go here.

To report problems with the PHP website, you should first try visiting another mirror sites in case the problem is only with a specific mirror. You should then report the problem (and the mirror(s) that have it) to webmaster@php.net.

Your email address:
PHP version:
Type of bug:
Operating system: ">
Bug description:
Password: You may enter any password here. This password allows you to come back and modify your submitted bug report at a later date. [Lost your password?]
Please supply any information that may be helpful in fixing the bug:
  • A short script that reproduces the problem
  • The list of modules you compiled PHP with (your configure line)
  • A copy of your php.ini file (if it might be relevant)
  • Any other information unique or specific to your setup
  • A gdb backtrace.