Fix logic for job log cleanup and make SQL safer
authorRich Lott / Artful Robot <forums@artfulrobot.uk>
Thu, 30 Apr 2020 12:21:23 +0000 (13:21 +0100)
committerRich Lott / Artful Robot <forums@artfulrobot.uk>
Thu, 30 Apr 2020 12:21:23 +0000 (13:21 +0100)
CRM/Core/BAO/Job.php

index 5609b3075f0270f4133a8bcb1ccfc427782aad97..2b085337bb290944b1b36a384adf0f9d4aea2d5e 100644 (file)
@@ -117,15 +117,16 @@ class CRM_Core_BAO_Job extends CRM_Core_DAO_Job {
     // Prevent the job log from getting too big
     // For now, keep last minDays days and at least maxEntries records
     $query = 'SELECT COUNT(*) FROM civicrm_job_log';
-    $count = CRM_Core_DAO::singleValueQuery($query);
+    $count = (int) CRM_Core_DAO::singleValueQuery($query);
 
     if ($count <= $maxEntriesToKeep) {
       return;
     }
 
-    $count = $count - $maxEntriesToKeep;
+    $count = $count - (int) $maxEntriesToKeep;
 
-    $query = "DELETE FROM civicrm_job_log WHERE run_time < SUBDATE(NOW(), $minDaysToKeep) LIMIT $count";
+    $minDaysToKeep = (int) $minDaysToKeep;
+    $query = "DELETE FROM civicrm_job_log WHERE run_time < SUBDATE(NOW(), $minDaysToKeep) ORDER BY id LIMIT $count";
     CRM_Core_DAO::executeQuery($query);
   }