[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[vidalia-svn] r4353: Ensure the torrc and DataDirectory paths contain only charac (in vidalia/trunk/src/vidalia: . config)
Author: edmanm
Date: 2010-07-14 11:50:50 -0400 (Wed, 14 Jul 2010)
New Revision: 4353
Added:
vidalia/trunk/src/vidalia/config/Local8BitStringValidator.cpp
vidalia/trunk/src/vidalia/config/Local8BitStringValidator.h
Modified:
vidalia/trunk/src/vidalia/CMakeLists.txt
vidalia/trunk/src/vidalia/config/AdvancedPage.cpp
Log:
Ensure the torrc and DataDirectory paths contain only characters that can
be represented using the system's local 8-bit character encoding.
Modified: vidalia/trunk/src/vidalia/CMakeLists.txt
===================================================================
--- vidalia/trunk/src/vidalia/CMakeLists.txt 2010-07-14 15:47:55 UTC (rev 4352)
+++ vidalia/trunk/src/vidalia/CMakeLists.txt 2010-07-14 15:50:50 UTC (rev 4353)
@@ -92,6 +92,7 @@
config/ExitPolicy.cpp
config/GeneralPage.cpp
config/IpValidator.cpp
+ config/Local8BitStringValidator.cpp
config/NetworkPage.cpp
config/NetworkSettings.cpp
config/NicknameValidator.cpp
@@ -119,6 +120,7 @@
config/ConfigPageStack.h
config/DomainValidator.h
config/GeneralPage.h
+ config/Local8BitStringValidator.h
config/NetworkPage.h
config/NetworkSettings.h
config/NicknameValidator.h
Modified: vidalia/trunk/src/vidalia/config/AdvancedPage.cpp
===================================================================
--- vidalia/trunk/src/vidalia/config/AdvancedPage.cpp 2010-07-14 15:47:55 UTC (rev 4352)
+++ vidalia/trunk/src/vidalia/config/AdvancedPage.cpp 2010-07-14 15:50:50 UTC (rev 4353)
@@ -18,6 +18,7 @@
#include "Vidalia.h"
#include "VMessageBox.h"
#include "IpValidator.h"
+#include "Local8BitStringValidator.h"
#include "file.h"
@@ -28,6 +29,7 @@
#include <QFile>
#include <QFileInfo>
#include <QHostAddress>
+#include <QTextCodec>
/** Constructor */
@@ -39,11 +41,17 @@
/* Create TorSettings object */
_settings = new TorSettings(Vidalia::torControl());
-
+
/* Set validators for the control port and IP address fields */
ui.lineControlAddress->setValidator(new IpValidator(this));
ui.lineControlPort->setValidator(new QIntValidator(1, 65535, this));
-
+
+ /* Set encoding validators for text boxes containing values that may be
+ * passed to Tor via the control port. */
+ ui.lineTorConfig->setValidator(new Local8BitStringValidator(this));
+ ui.lineTorDataDirectory->setValidator(new Local8BitStringValidator(this));
+ ui.linePassword->setValidator(new Local8BitStringValidator(this));
+
/* Bind event to actions */
connect(ui.btnBrowseTorConfig, SIGNAL(clicked()), this, SLOT(browseTorConfig()));
connect(ui.btnBrowseTorDataDirectory, SIGNAL(clicked()),
@@ -121,7 +129,22 @@
"specify a password.");
return false;
}
-
+
+ /* Ensure that the DataDirectory and torrc options only contain characters
+ * that are valid in the local 8-bit encoding. */
+ if (! Local8BitStringValidator::canEncode(ui.lineTorConfig->text())) {
+ errmsg = tr("The specified Tor configuration file location contains "
+ "characters that cannot be represented in your system's "
+ "current 8-bit character encoding.");
+ return false;
+ }
+ if (! Local8BitStringValidator::canEncode(ui.lineTorDataDirectory->text())) {
+ errmsg = tr("The specified Tor data directory location contains "
+ "characters that cannot be represented in your system's "
+ "current 8-bit character encoding.");
+ return false;
+ }
+
/* Only remember the torrc and datadir values if Vidalia started Tor, or
* if the user changed the displayed values. */
if (!Vidalia::torControl()->isVidaliaRunningTor()) {
@@ -224,7 +247,7 @@
tr("Select Tor Configuration File"),
QFileInfo(ui.lineTorConfig->text()).filePath(),
tr("Tor Configuration File (torrc);;All Files (*)"));
-
+
/* Make sure a filename was selected */
if (filename.isEmpty()) {
return;
@@ -266,7 +289,7 @@
QString dataDir = QFileDialog::getExistingDirectory(this,
tr("Select a Directory to Use for Tor Data"),
ui.lineTorDataDirectory->text());
-
+
if (!dataDir.isEmpty())
ui.lineTorDataDirectory->setText(dataDir);
}
Added: vidalia/trunk/src/vidalia/config/Local8BitStringValidator.cpp
===================================================================
--- vidalia/trunk/src/vidalia/config/Local8BitStringValidator.cpp (rev 0)
+++ vidalia/trunk/src/vidalia/config/Local8BitStringValidator.cpp 2010-07-14 15:50:50 UTC (rev 4353)
@@ -0,0 +1,44 @@
+/*
+** This file is part of Vidalia, and is subject to the license terms in the
+** LICENSE file, found in the top level directory of this distribution. If you
+** did not receive the LICENSE file with this file, you may obtain it from the
+** Vidalia source package distributed by the Vidalia Project at
+** http://www.vidalia-project.net/. No part of Vidalia, including this file,
+** may be copied, modified, propagated, or distributed except according to the
+** terms described in the LICENSE file.
+*/
+
+/*
+** \file Local8BitStringValidator.cpp
+** \version $Id$
+** \brief Validates that a given string contains only characters capable of
+** being represented in the current local 8-bit character encoding.
+*/
+
+#include "Local8BitStringValidator.h"
+
+
+/** Constructor. */
+Local8BitStringValidator::Local8BitStringValidator(QObject *parent)
+ : QValidator(parent)
+{
+ _codec = QTextCodec::codecForLocale();
+}
+
+/** Validates the given input contains only valid nickname characters starting
+ * at the specified position. */
+QValidator::State
+Local8BitStringValidator::validate(QString &input, int &pos) const
+{
+ Q_UNUSED(pos);
+
+ if (_codec->canEncode(input))
+ return QValidator::Acceptable;
+ return QValidator::Invalid;
+}
+
+bool
+Local8BitStringValidator::canEncode(const QString &input)
+{
+ return QTextCodec::codecForLocale()->canEncode(input);
+}
Property changes on: vidalia/trunk/src/vidalia/config/Local8BitStringValidator.cpp
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Added: vidalia/trunk/src/vidalia/config/Local8BitStringValidator.h
===================================================================
--- vidalia/trunk/src/vidalia/config/Local8BitStringValidator.h (rev 0)
+++ vidalia/trunk/src/vidalia/config/Local8BitStringValidator.h 2010-07-14 15:50:50 UTC (rev 4353)
@@ -0,0 +1,44 @@
+/*
+** This file is part of Vidalia, and is subject to the license terms in the
+** LICENSE file, found in the top level directory of this distribution. If you
+** did not receive the LICENSE file with this file, you may obtain it from the
+** Vidalia source package distributed by the Vidalia Project at
+** http://www.vidalia-project.net/. No part of Vidalia, including this file,
+** may be copied, modified, propagated, or distributed except according to the
+** terms described in the LICENSE file.
+*/
+
+/*
+** \file Local8BitStringValidator.h
+** \version $Id$
+** \brief Validates that a given string contains only characters capable of
+** being represented in the current local 8-bit character encoding.
+*/
+
+#ifndef _LOCAL8BITSTRINGVALIDATOR_H
+#define _LOCAL8BITSTRINGVALIDATOR_H
+
+#include <QValidator>
+#include <QTextCodec>
+
+
+class Local8BitStringValidator : public QValidator
+{
+ Q_OBJECT
+
+public:
+ /** Constructor. */
+ Local8BitStringValidator(QObject *parent);
+ /** Validates the given input at the specified position. */
+ QValidator::State validate(QString &input, int &pos) const;
+
+ /** Returns true if <b>input</b> can be encoded with the current local
+ * 8-bit character encoding. */
+ static bool canEncode(const QString &input);
+
+private:
+ QTextCodec* _codec;
+};
+
+#endif
+
Property changes on: vidalia/trunk/src/vidalia/config/Local8BitStringValidator.h
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native