<table><tr><td style="">martinkostolny updated this revision to Diff 13517.<br />martinkostolny added a comment.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D5394" rel="noreferrer">View Revision</a></tr></table><br /><div><div><p>Updated diff based on Fabian's advisory. Thanks, Fabian!</p>

<p>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.</p>

<p>Known issues:</p>

<ul class="remarkup-list">
<li class="remarkup-list-item">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.</li>
<li class="remarkup-list-item">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.</li>
</ul></div></div><br /><div><strong>REPOSITORY</strong><div><div>R39 KTextEditor</div></div></div><br /><div><strong>CHANGES SINCE LAST UPDATE</strong><div><a href="https://phabricator.kde.org/D5394?vs=13314&id=13517" rel="noreferrer">https://phabricator.kde.org/D5394?vs=13314&id=13517</a></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D5394" rel="noreferrer">https://phabricator.kde.org/D5394</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>src/buffer/katesecuretextbuffer.cpp<br />
src/buffer/katesecuretextbuffer_p.h<br />
src/buffer/katetextbuffer.cpp<br />
src/buffer/katetextbuffer.h</div></div></div><br /><div><strong>To: </strong>martinkostolny, KTextEditor, fvogt<br /><strong>Cc: </strong>elvisangelaccio, aacid, ivan, lbeltrame, fvogt, apol, anthonyfieroni, cullmann, ltoscano, dhaumann, graesslin, davidedmundson, palant, kwrite-devel, dfaure, Frameworks, head7, kfunk, sars<br /></div>