Update: PeterVH, I tried your fix without the guard but I can't get it to work reliably. It works for 100KB or so, then corruption, then nothing.
I can confirm the behavior. I had only tested with an 8KB file. With an 170K file I have corruption too: it goes well for some time but then each byte gets sent several times.
I don't understand. I also tried with replacing the guard code with:
irqflags_t flags = cpu_irq_save();
... body of accept ...
cpu_irq_restore(flags);
The idea was instead of avoiding the isr to enter the routine, to avoid an isr alltogether by disabling interrupts. It does not work either.
The good thing is that I can also confirm the version in github works ok (tested with a 170KB file).
I will do tests with ArduinoISP also.