[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Bug introduced in ed v1.14 (up to v1.19) corrupting full file which
From: |
Antonio Diaz Diaz |
Subject: |
Re: Bug introduced in ed v1.14 (up to v1.19) corrupting full file which delta changes are applied to |
Date: |
Tue, 03 Oct 2023 18:17:26 +0200 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.9.1.19) Gecko/20110420 SeaMonkey/2.0.14 |
Hello Danie,
Danie Theron - DSV wrote:
This is working fine up to v1.13 of "ed", but since v1.14 up to the
latest version v1.19, the deltas are not being applied correctly causing
corruption in the reconstruction of programs.
You are taking the deltas from the standard output of ed, which is for human
consumption, not to be used as output to be written to a file. This may have
worked with older versions of ed, but it no longer is expected to work.
For example, POSIX[1] states that:
If changes have been made in the buffer since the last w command that wrote
the entire buffer, ed shall warn the user if an attempt is made to destroy
the editor buffer via the e or q commands. The ed utility shall write the
string:
"?\n"
(followed by an explanatory message if help mode has been enabled via the H
command) to standard output and shall continue in command mode with the
current line number unchanged.
and
If an end-of-file is detected on standard input:
[...]
If the ed utility is in command mode, it shall act as if a q command
had been entered.
[1] https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ed.html
The cause of the '?' being inserted into the reconstructed files is that ed
is reaching the end of file on standard input with the buffer modified:
$ (cat textfile_v1.1_delta.txt ; echo '1,$p') | ed -vs textfile_v1.0.txt |
diff textfile_v1.1.txt -
7a8,9
> ?
> Warning: buffer modified
A workaround may be to exit ed unconditionally with command 'Q':
$ (cat textfile_v1.1_delta.txt ; echo '1,$p' ; echo 'Q') | ed -s
textfile_v1.0.txt | diff textfile_v1.1.txt -
But probably a better solution would be to use the 'w' command of 'ed', or
to use 'patch' instead of 'ed' to apply the patches.
Best regards,
Antonio.
Re: Bug introduced in ed v1.14 (up to v1.19) corrupting full file which delta changes are applied to, Shawn Wagner, 2023/10/03