From d4ef35e8acc6e481c29384749c6dd28b3f4ff361 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Tue, 12 Apr 2016 22:19:22 +0200 Subject: [PATCH] Add better fatal error handling --- CHANGELOG | 1 + chat.php | 43 ++++++++++++++++++++++++++----------------- lang_de.php | 5 +++-- lang_en.php | 5 +++-- lang_es_AR.php | 2 +- lang_es_ES.php | 2 +- lang_fr.php | 2 +- lang_id.php | 2 +- lang_ru.php | 2 +- 9 files changed, 38 insertions(+), 26 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 94c6a58..9559c88 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -8,6 +8,7 @@ Attempt to create database when there is no connection Add fallback option for moderator approval Fix guestaccess selection in setup Add option to let guests register themselves +Add better fatal error handling Version 1.15.3 - Mar. 6, 2016 Allow using html tags in linkfilter without breaking dereferrer or image embed diff --git a/chat.php b/chat.php index 065b1d8..4c1b19c 100644 --- a/chat.php +++ b/chat.php @@ -62,7 +62,7 @@ if(!isSet($_REQUEST['action'])){ send_messages(true); }elseif($_REQUEST['action']==='jsrefresh'){ if(!extension_loaded('json')){ - die($I['jsonextrequired']); + send_fatal_error($I['jsonextrequired']); } check_session(); ob_start(); @@ -271,7 +271,6 @@ if(!isSet($_REQUEST['action'])){ }else{ send_login(); } -exit; // html output subs function print_stylesheet(){ @@ -1305,7 +1304,7 @@ function send_notes($type){ if(isset($_REQUEST['text'])){ if(MSGENCRYPTED){ if(!extension_loaded('openssl')){ - die($I['opensslextrequired']); + send_fatal_error($I['opensslextrequired']); } $_REQUEST['text']=openssl_encrypt($_REQUEST['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456'); } @@ -1339,7 +1338,7 @@ function send_notes($type){ } if(MSGENCRYPTED){ if(!extension_loaded('openssl')){ - die($I['opensslextrequired']); + send_fatal_error($I['opensslextrequired']); } $note['text']=openssl_decrypt($note['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456'); } @@ -1857,7 +1856,17 @@ function send_login(){ function send_error($err){ global $H, $I; print_start('error'); - echo "

$I[error] $err

$H[backtologin]"; + echo "

$I[error]: $err

$H[backtologin]"; + print_end(); +} + +function send_fatal_error($err){ + global $H, $I; + echo "$H[meta_html]"; + echo "$I[fatalerror]"; + echo ""; + echo ''; + echo "

$I[fatalerror]: $err

"; print_end(); } @@ -2781,7 +2790,7 @@ function write_message($message){ global $db; if(MSGENCRYPTED){ if(!extension_loaded('openssl')){ - die($I['opensslextrequired']); + send_fatal_error($I['opensslextrequired']); } $message['text']=openssl_encrypt($message['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456'); } @@ -2876,7 +2885,7 @@ function print_messages($delstatus=''){ while($message=$stmt->fetch(PDO::FETCH_ASSOC)){ if(MSGENCRYPTED){ if(!extension_loaded('openssl')){ - die($I['opensslextrequired']); + send_fatal_error($I['opensslextrequired']); } $message['text']=openssl_decrypt($message['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456'); } @@ -2913,7 +2922,7 @@ function print_messages($delstatus=''){ while($message=$stmt->fetch(PDO::FETCH_ASSOC)){ if(MSGENCRYPTED){ if(!extension_loaded('openssl')){ - die($I['opensslextrequired']); + send_fatal_error($I['opensslextrequired']); } $message['text']=openssl_decrypt($message['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456'); } @@ -3285,7 +3294,7 @@ function update_db(){ update_setting('dbversion', DBVERSION); if(get_setting('msgencrypted')!=MSGENCRYPTED){ if(!extension_loaded('openssl')){ - die($I['opensslextrequired']); + send_fatal_error($I['opensslextrequired']); } $result=$db->query('SELECT id, text FROM ' . PREFIX . 'messages;'); $stmt=$db->prepare('UPDATE ' . PREFIX . 'messages SET text=? WHERE id=?;'); @@ -3344,17 +3353,17 @@ function check_db(){ try{ if(DBDRIVER===0){ if(!extension_loaded('pdo_mysql')){ - die($I['pdo_mysqlextrequired']); + send_fatal_error($I['pdo_mysqlextrequired']); } $db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME, DBUSER, DBPASS, $options); }elseif(DBDRIVER===1){ if(!extension_loaded('pdo_pgsql')){ - die($I['pdo_pgsqlextrequired']); + send_fatal_error($I['pdo_pgsqlextrequired']); } $db=new PDO('pgsql:host=' . DBHOST . ';dbname=' . DBNAME, DBUSER, DBPASS, $options); }else{ if(!extension_loaded('pdo_sqlite')){ - die($I['pdo_sqliteextrequired']); + send_fatal_error($I['pdo_sqliteextrequired']); } $db=new PDO('sqlite:' . SQLITEDBFILE, NULL, NULL, $options); } @@ -3366,7 +3375,7 @@ function check_db(){ if(false!==$db->exec('CREATE DATABASE ' . DBNAME)){ $db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME, DBUSER, DBPASS, $options); }else{ - die($I['nodbsetup']); + send_fatal_error($I['nodbsetup']); } }elseif(DBDRIVER===1){ @@ -3374,20 +3383,20 @@ function check_db(){ if(false!==$db->exec('CREATE DATABASE ' . DBNAME)){ $db=new PDO('pgsql:host=' . DBHOST . ';dbname=' . DBNAME, DBUSER, DBPASS, $options); }else{ - die($I['nodbsetup']); + send_fatal_error($I['nodbsetup']); } } }catch(PDOException $e){ if(isSet($_REQUEST['action']) && $_REQUEST['action']==='setup'){ - die($I['nodbsetup']); + send_fatal_error($I['nodbsetup']); }else{ - die($I['nodb']); + send_fatal_error($I['nodb']); } } } if(MEMCACHED){ if(!extension_loaded('memcached')){ - die($I['memcachedextrequired']); + send_fatal_error($I['memcachedextrequired']); } $memcached=new Memcached(); $memcached->addServer(MEMCACHEDHOST, MEMCACHEDPORT); diff --git a/lang_de.php b/lang_de.php index 61d882f..d9f036d 100644 --- a/lang_de.php +++ b/lang_de.php @@ -180,7 +180,7 @@ $T=array( 'choosecol' => 'Gast, such dir eine Farbe aus:', 'randomcol' => 'Zufällige Farbe', 'enter' => 'Chat beitreten', - 'error' => 'Fehler:', + 'error' => 'Fehler', 'members' => 'Mitglieder', 'guests' => 'Gäste', 'approveguests' => '%d neue Gäste zum Hereinlassen', @@ -327,6 +327,7 @@ $T=array( 'regpass' => 'Zum registrieren
Passwort wiederholen
(optional)', 'guestreg' => 'Gäste sich selbst registrieren lassen', 'asmember' => 'Als Mitglied', - 'assuguest' => 'Als Anwerber' + 'assuguest' => 'Als Anwerber', + 'fatalerror' => 'Fataler Fehler' ); ?> diff --git a/lang_en.php b/lang_en.php index 754977b..d370306 100644 --- a/lang_en.php +++ b/lang_en.php @@ -180,7 +180,7 @@ $I=array( 'choosecol' => 'Guests, choose a colour:', 'randomcol' => 'Random Colour', 'enter' => 'Enter Chat', - 'error' => 'Error:', + 'error' => 'Error', 'members' => 'Members', 'guests' => 'Guests', 'approveguests' => '%d new guests to approve', @@ -327,6 +327,7 @@ $I=array( 'regpass' => 'Repeat password
to register
(optional)', 'guestreg' => 'Let guests register themselves', 'asmember' => 'As member', - 'assuguest' => 'As applicant' + 'assuguest' => 'As applicant', + 'fatalerror' => 'Fatal error' ); ?> diff --git a/lang_es_AR.php b/lang_es_AR.php index 2126b4e..02cc2b9 100644 --- a/lang_es_AR.php +++ b/lang_es_AR.php @@ -180,7 +180,7 @@ $T=array( 'choosecol' => 'Invitado, elegí un color:', 'randomcol' => 'Color al azar', 'enter' => 'Entrar a la sala', - 'error' => 'Error:', + 'error' => 'Error', 'members' => 'Miembros', 'guests' => 'Invitados', 'approveguests' => '%d nuevos invitados para aprobar', diff --git a/lang_es_ES.php b/lang_es_ES.php index eb210d0..3690c56 100644 --- a/lang_es_ES.php +++ b/lang_es_ES.php @@ -180,7 +180,7 @@ $T=array( 'choosecol' => 'Invitado, elija un color:', 'randomcol' => 'Color al azar', 'enter' => 'Ingresar a la sala', - 'error' => 'Error:', + 'error' => 'Error', 'members' => 'Miembros', 'guests' => 'Invitados', 'approveguests' => '%d nuevos invitados para aprobar', diff --git a/lang_fr.php b/lang_fr.php index 5fb027a..06849d0 100644 --- a/lang_fr.php +++ b/lang_fr.php @@ -180,7 +180,7 @@ $T=array( 'choosecol' => 'Invité, choisir une couleur:', 'randomcol' => 'Couleur aléatoire', 'enter' => 'Entrer', - 'error' => 'Erreur:', + 'error' => 'Erreur', 'members' => 'Membres', 'guests' => 'Invités', 'approveguests' => '%d nouveaux invités à approuver', diff --git a/lang_id.php b/lang_id.php index c26d764..7be55f0 100644 --- a/lang_id.php +++ b/lang_id.php @@ -180,7 +180,7 @@ $T=array( 'choosecol' => 'Silahkan pilih warna:', 'randomcol' => 'Warna acak', 'enter' => 'Masuk obrolan', - 'error' => 'Kesalahan:', + 'error' => 'Kesalahan', 'members' => 'Anggota', 'guests' => 'Tamu', 'approveguests' => '%d tamu baru untuk disetujui', diff --git a/lang_ru.php b/lang_ru.php index 69a3909..49db1e0 100644 --- a/lang_ru.php +++ b/lang_ru.php @@ -180,7 +180,7 @@ $T=array( 'choosecol' => 'Гости выбирают цвет:', 'randomcol' => 'Случайный цвет', 'enter' => 'Войти в чат', - 'error' => 'Ошибка:', + 'error' => 'Ошибка', 'members' => 'Зарегистрированные', 'guests' => 'Гости', 'approveguests' => '%d новые гости для одобрения',