martinkostolny updated this revision to Diff 13517.
martinkostolny added a comment.


  Updated diff based on Fabian's advisory. Thanks, Fabian!
  
  I've implemented the first option: checksum -> tempfile1 -> read in 
privileged action -> checksum -> tempfile2 -> permissions -> rename. It works 
with big (e.g. 50MiB) files. I hope I didn't miss something.
  
  Known issues:
  
  - Using std::rename only for unix systems while using racy QFile's remove && 
rename for windows as fallback. I cannot test on windows otherwise I'd 
implemented an atomic rename there as well.
  - I'm now using QBuffer to buffer all file bytes before making the first 
checksum. Probably the best solution (memory-wise) would be to use 
QTemporaryFile directly and capture all written bytes right before they are 
written to the file and make the checksum from it. But I didn't find an easy 
way to do that.

REPOSITORY
  R39 KTextEditor

CHANGES SINCE LAST UPDATE
  https://phabricator.kde.org/D5394?vs=13314&id=13517

REVISION DETAIL
  https://phabricator.kde.org/D5394

AFFECTED FILES
  src/buffer/katesecuretextbuffer.cpp
  src/buffer/katesecuretextbuffer_p.h
  src/buffer/katetextbuffer.cpp
  src/buffer/katetextbuffer.h

To: martinkostolny, #ktexteditor, fvogt
Cc: elvisangelaccio, aacid, ivan, lbeltrame, fvogt, apol, anthonyfieroni, 
cullmann, ltoscano, dhaumann, graesslin, davidedmundson, palant, kwrite-devel, 
dfaure, #frameworks, head7, kfunk, sars

Reply via email to