Browse Source

- Safer temporary filename generation: create the temporary file to make sure the name is not generated twice

adaptive-webui-19844
Christophe Dumez 15 years ago
parent
commit
91dee6058e
  1. 17
      src/downloadThread.cpp
  2. 17
      src/httpconnection.cpp

17
src/downloadThread.cpp

@ -77,13 +77,20 @@ subDownloadThread::~subDownloadThread(){
} }
void subDownloadThread::run(){ void subDownloadThread::run(){
// XXX: Trick to get a unique filename // Get a unique filename
QString filePath; QString filePath;
QTemporaryFile *tmpfile = new QTemporaryFile(); QTemporaryFile tmpfile;
if (tmpfile->open()) { tmpfile.setAutoRemove(false);
filePath = tmpfile->fileName(); if (tmpfile.open()) {
filePath = tmpfile.fileName();
qDebug("Temporary filename is: %s", filePath.toLocal8Bit().data());
} else {
emit downloadFailureST(this, url, tr("I/O Error"));
return;
} }
delete tmpfile; tmpfile.close();
// Now temporary file is created but closed so that
// curl can use it
FILE *f = fopen(filePath.toLocal8Bit().data(), "wb"); FILE *f = fopen(filePath.toLocal8Bit().data(), "wb");
if(!f) { if(!f) {
std::cerr << "couldn't open destination file" << "\n"; std::cerr << "couldn't open destination file" << "\n";

17
src/httpconnection.cpp

@ -200,14 +200,19 @@ void HttpConnection::respondCommand(QString command)
if(command == "upload") if(command == "upload")
{ {
QByteArray torrentfile = parser.torrent(); QByteArray torrentfile = parser.torrent();
// XXX: Trick to get a unique filename // Get a unique filename
QString filePath; QString filePath;
QTemporaryFile *tmpfile = new QTemporaryFile(); QTemporaryFile tmpfile;
if (tmpfile->open()) { tmpfile.setAutoRemove(false);
filePath = tmpfile->fileName(); if (tmpfile.open()) {
filePath = tmpfile.fileName();
} else {
std::cerr << "I/O Error: Could not create temporary file" << std::endl;
return;
} }
delete tmpfile; tmpfile.close();
// write it to HD // Now temporary file is created but closed so that it can be used.
// write torrent to temporary file
QFile torrent(filePath); QFile torrent(filePath);
if(torrent.open(QIODevice::WriteOnly)) { if(torrent.open(QIODevice::WriteOnly)) {
torrent.write(torrentfile); torrent.write(torrentfile);

Loading…
Cancel
Save