\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:
Where the bug description contains:
\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", "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", "filePro related" => "         filePro 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", "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", "mcrypt related" => "    mcrypt related", "mhash related" => "    mhash 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="aaaaaa"; $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 (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.

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.