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 новые гости для одобрения',