RFC on file_store()

Pavel Machek pavel at ucw.cz
Sat Jun 16 09:54:27 UTC 2001


Hi!

> I've just discovered a very suspicious piece of code in fish.c, function
> file_store():
> 
>     while (1) {
>         while ((n = read(h, buffer, sizeof(buffer))) < 0) {
>             if ((errno == EINTR) && got_interrupt)
>                 continue;
>             print_vfs_message(_("fish: Local read failed, sending zeros") );
>             close(h);
>             h = open( "/dev/zero", O_RDONLY );
>         }
>         if (n == 0)
>             break;
> 
> You are using got_interrupt without parentheses. It's always true. But do
> you really mean to continue if the user tries to interrupt the command?
> 
> It may happen that some data has been read. Then n will be positive, but
> still the user interrupt should be honored.
> 
> Sending zeroes is very bad. It means corrupted data on the remote side. Is
> it possible to send break instead?

Congratulation, you've just discovered problem in fish :-(.

Ok, I knew about this before. Problem is: what to do? Do you think
dropping connection and reconnecting is the right thing?

[There's another ugly problem in fish: Imagine file full of rm -rf /
being sent to remote. Imagine something wents horribly wrong (both dds
killed). Hopefully that will just never happen in practice.]

								Pavel


-- 
The best software in life is free (not shareware)!		Pavel
GCM d? s-: !g p?:+ au- a--@ w+ v- C++@ UL+++ L++ N++ E++ W--- M- Y- R+




More information about the mc-devel mailing list