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(){ @@ -77,13 +77,20 @@ subDownloadThread::~subDownloadThread(){
}
void subDownloadThread::run(){
// XXX: Trick to get a unique filename
// Get a unique filename
QString filePath;
QTemporaryFile *tmpfile = new QTemporaryFile();
if (tmpfile->open()) {
filePath = tmpfile->fileName();
QTemporaryFile tmpfile;
tmpfile.setAutoRemove(false);
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");
if(!f) {
std::cerr << "couldn't open destination file" << "\n";

17
src/httpconnection.cpp

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

Loading…
Cancel
Save