fix: Refuse to write empty journald cursors and inform users

Exits from `persist_cursor` early if the cursor received from journald
is an empty string.

We don't currently know if this actually happens (please see #2 for
more details), so an error message has been added that asks users to
report this if it ever occurs.
This commit is contained in:
Vincent Ambo 2018-10-09 11:01:33 +02:00 committed by Vincent Ambo
parent c1ab78c05a
commit 61b2577a19

View file

@ -494,6 +494,18 @@ fn receiver_loop(mut journal: Journal) -> Result<()> {
/// is still being written, this will first write the cursor into a
/// temporary file and then move it.
fn persist_cursor(cursor: String) -> Result<()> {
// This code exists to aid in tracking down if there are other
// causes of issue #2 than what has already been taken care of.
//
// One theory is that journald (or the Rust library to interface
// with it) may occasionally return empty cursor strings. If this
// is ever the case, we would like to know about it.
if cursor.is_empty() {
error!("Received empty journald cursor position, refusing to persist!");
error!("Please report this message at https://github.com/tazjin/journaldriver/issues/2");
return Ok(())
}
let mut file = File::create(&*CURSOR_TMP_FILE)?;
write!(file, "{}", cursor).context("Failed to write cursor file")?;
rename(&*CURSOR_TMP_FILE, &*CURSOR_FILE)