@@ -307,7 +307,7 @@ function syslog_partition_create($table) {
307307 /* determine the format of the table name */
308308 $ time = time ();
309309 $ cformat = 'd ' . date ('Ymd ' , $ time );
310- $ lnow = date ('Y-m-d ' , $ time+ 86400 );
310+ $ lnow = date ('Y-m-d ' , strtotime ( ' +1 day ' , $ time) );
311311
312312 $ exists = syslog_db_fetch_row_prepared ("SELECT *
313313 FROM `information_schema`.`partitions`
@@ -788,12 +788,12 @@ function syslog_export($tab) {
788788
789789 print
790790 '" ' .
791- $ host . '"," ' .
792- ucfirst ($ facility ) . '"," ' .
793- ucfirst ($ priority ) . '"," ' .
794- ucfirst ($ program ) . '"," ' .
795- $ message ['logtime ' ] . '"," ' .
796- $ message [$ syslog_incoming_config ['textField ' ]] . '" ' . "\r\n" ;
791+ syslog_csv_safe ( $ host) . '"," ' .
792+ syslog_csv_safe ( ucfirst ($ facility) ) . '"," ' .
793+ syslog_csv_safe ( ucfirst ($ priority) ) . '"," ' .
794+ syslog_csv_safe ( ucfirst ($ program) ) . '"," ' .
795+ syslog_csv_safe ( $ message ['logtime ' ]) . '"," ' .
796+ syslog_csv_safe ( $ message [$ syslog_incoming_config ['textField ' ]]) . '" ' . "\r\n" ;
797797 }
798798 }
799799 } else {
@@ -815,14 +815,14 @@ function syslog_export($tab) {
815815
816816 print
817817 '" ' .
818- $ message ['name ' ] . '"," ' .
819- $ severity . '"," ' .
820- $ message ['logtime ' ] . '"," ' .
821- $ message ['logmsg ' ] . '"," ' .
822- $ message ['host ' ] . '"," ' .
823- ucfirst ($ message ['facility ' ]) . '"," ' .
824- ucfirst ($ message ['priority ' ]) . '"," ' .
825- $ message ['count ' ] . '" ' . "\r\n" ;
818+ syslog_csv_safe ( $ message ['name ' ]) . '"," ' .
819+ syslog_csv_safe ( $ severity) . '"," ' .
820+ syslog_csv_safe ( $ message ['logtime ' ]) . '"," ' .
821+ syslog_csv_safe ( $ message ['logmsg ' ]) . '"," ' .
822+ syslog_csv_safe ( $ message ['host ' ]) . '"," ' .
823+ syslog_csv_safe ( ucfirst ($ message ['facility ' ]) ) . '"," ' .
824+ syslog_csv_safe ( ucfirst ($ message ['priority ' ]) ) . '"," ' .
825+ syslog_csv_safe ( $ message ['count ' ]) . '" ' . "\r\n" ;
826826 }
827827 }
828828 }
@@ -2050,6 +2050,31 @@ function syslog_postprocess_tables() {
20502050 }
20512051}
20522052
2053+ /**
2054+ * syslog_csv_safe - Escapes a value for safe inclusion in a CSV field.
2055+ *
2056+ * Prevents formula injection by prefixing cells that start with a trigger
2057+ * character, and escapes embedded double-quotes per RFC 4180.
2058+ *
2059+ * @param (mixed) $value The value to sanitize
2060+ *
2061+ * @return (string) The sanitized string
2062+ */
2063+ function syslog_csv_safe ($ value ) {
2064+ if ($ value === null || $ value === '' ) {
2065+ return '' ;
2066+ }
2067+
2068+ $ value = (string ) $ value ;
2069+ $ value = str_replace ('" ' , '"" ' , $ value );
2070+
2071+ if (preg_match ('/^[=+\-@\t\r]/ ' , $ value )) {
2072+ $ value = "' " . $ value ;
2073+ }
2074+
2075+ return $ value ;
2076+ }
2077+
20532078/**
20542079 * syslog_process_reports - Processes all syslog reports scheduled to run
20552080 *
0 commit comments