bug-ed
[Top][All Lists]
Advanced

[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: Development Team
Subject: RE: Bug introduced in ed v1.14 (up to v1.19) corrupting full file which delta changes are applied to
Date: Tue, 3 Oct 2023 16:23:37 +0000

Hi.

Thanks for the quick responses.

Adding the echo 'Q' seems to resolve. I assume there is no issue using same on 
prior releases of ed?

"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."

The deltas in question are generated with diff -e to produce the ed output.

Jeff

-----Original Message-----
From: Antonio Diaz Diaz <antonio@gnu.org> 
Sent: Tuesday, October 3, 2023 11:18 AM
To: Danie Theron - DSV <danie.theron@dsv.com>
Cc: bug-ed@gnu.org; Development Team <dev@roundtable-software.com>
Subject: Re: Bug introduced in ed v1.14 (up to v1.19) corrupting full file 
which delta changes are applied to

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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]