From 6fb12d2bfe8a7360103f07e18197ba5d280989b1 Mon Sep 17 00:00:00 2001 From: Dan Fandrich Date: Tue, 16 Apr 2024 19:37:08 -0700 Subject: Ensure the .adv file ends with newline when publishing Lacking a newline corrupts the file when the ID is appended. Return an error if this case is detected. --- NEWS | 4 ++++ lib/MGA/Advisories.pm | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/NEWS b/NEWS index 7d92c2f..3440810 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,7 @@ +Version 0.X + +- ensure .adv file ends with newline when publishing + Version 0.30 - try to fix publish-all diff --git a/lib/MGA/Advisories.pm b/lib/MGA/Advisories.pm index 2506c3c..3752250 100644 --- a/lib/MGA/Advisories.pm +++ b/lib/MGA/Advisories.pm @@ -9,6 +9,7 @@ use DateTime::Format::ISO8601; use Email::Sender::Simple qw(try_to_sendmail); use Email::Simple; use Email::Simple::Creator; +use Fcntl qw(SEEK_END); use HTTP::Request; use LWP::UserAgent; use Parallel::ForkManager; @@ -232,6 +233,16 @@ sub assign_id { return; } + # Appending the ID later assumes that the file ends in a newline + open(my $fha, "<", $advfile); + seek($fha, -1, SEEK_END); + my $c = <$fha>; + close($fha); + if ($c ne "\n") { + print STDERR "$advname missing newline at end of file\n"; + return; + } + my $adv = LoadFile($advfile); if ($adv->{ID}) { print STDERR "$advname already has an ID assigned: $adv->{ID}\n"; -- cgit v1.2.1