[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