Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.egit.ui/src/org/eclipse/egit')
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java3
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/AddConfigEntryDialog.java41
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties9
3 files changed, 45 insertions, 8 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
index f2d14edb7e..7dc43ea5ad 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
@@ -101,6 +101,9 @@ public class UIText extends NLS {
public static String AddConfigEntryDialog_EnterValueMessage;
/** */
+ public static String AddConfigEntryDialog_InvalidKeyMessage;
+
+ /** */
public static String AddConfigEntryDialog_KeyComponentsMessage;
/** */
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/AddConfigEntryDialog.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/AddConfigEntryDialog.java
index 352f19afb6..7d5cc35aa3 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/AddConfigEntryDialog.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/AddConfigEntryDialog.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010, SAP AG.
+ * Copyright (c) 2010, 2017 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -7,10 +7,12 @@
*
* Contributors:
* Mathias Kinzler (SAP AG) - initial implementation
+ * Thomas Wolf <thomas.wolf@paranor.ch> - input validation
*******************************************************************************/
package org.eclipse.egit.ui.internal.preferences;
import java.util.StringTokenizer;
+import java.util.regex.Pattern;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.jface.dialogs.TitleAreaDialog;
@@ -26,9 +28,27 @@ import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
- * Requests a key and value for adding a configuration entry
+ * Requests a key and value for adding a configuration entry.
*/
public class AddConfigEntryDialog extends TitleAreaDialog {
+
+ /**
+ * Regular expression describing a valid git config key. See config.c in the
+ * CGit sources, or https://git-scm.com/docs/git-config. Basically it's
+ * section.subsection.name, where section and name must contain only
+ * alphanumeric characters or the dash, and name must start with a letter.
+ *
+ * Cgit also allows periods in the section name to support the legacy syntax
+ * [section.subsection]. For our use case, this is irrelevant, and EGit
+ * takes only the first segment as section name.
+ *
+ * Note that we allow arbitrary whitespace before and after; we'll trim that
+ * away in {@link #okPressed}.
+ */
+ private static final Pattern VALID_KEY = Pattern
+ .compile(
+ "(\\h|\\v)*[-\\p{Alnum}]+(?:\\..*)?\\.\\p{Alpha}[-\\p{Alnum}]*(\\h|\\v)*"); //$NON-NLS-1$
+
private Text keyText;
private Text valueText;
@@ -65,7 +85,7 @@ public class AddConfigEntryDialog extends TitleAreaDialog {
keylLabel.setToolTipText(UIText.AddConfigEntryDialog_ConfigKeyTooltip);
keyText = new Text(main, SWT.BORDER);
if (suggestedKey != null) {
- keyText.setText(suggestedKey);
+ keyText.setText(trimKey(suggestedKey));
keyText.selectAll();
}
@@ -91,6 +111,14 @@ public class AddConfigEntryDialog extends TitleAreaDialog {
return main;
}
+ private boolean isValidKey(String keyValue) {
+ return keyValue != null && VALID_KEY.matcher(keyValue).matches();
+ }
+
+ private String trimKey(String keyValue) {
+ return keyValue.replaceAll("^(?:\\h|\\v)*|(?:\\h|\\v)*$", ""); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
@Override
public void create() {
super.create();
@@ -113,6 +141,11 @@ public class AddConfigEntryDialog extends TitleAreaDialog {
hasError = true;
return;
}
+ if (!isValidKey(keyText.getText())) {
+ setErrorMessage(UIText.AddConfigEntryDialog_InvalidKeyMessage);
+ hasError = true;
+ return;
+ }
if (valueText.getText().length() == 0) {
setErrorMessage(UIText.AddConfigEntryDialog_EnterValueMessage);
hasError = true;
@@ -125,7 +158,7 @@ public class AddConfigEntryDialog extends TitleAreaDialog {
@Override
protected void okPressed() {
- key = keyText.getText();
+ key = trimKey(keyText.getText());
value = valueText.getText();
super.okPressed();
}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties
index 7546fd8e60..fc28db2b6c 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties
@@ -40,11 +40,12 @@ Activator_refreshFailed=Failed to refresh projects from index changes
Activator_setupFocusListener=Setting up the focus listener
AddConfigEntryDialog_AddConfigTitle=Add a configuration entry
AddConfigEntryDialog_ConfigKeyTooltip=Use "." to separate section/subsection/name, e.g. "core.bare", "remote.origin.url"
-AddConfigEntryDialog_DialogMessage=Please enter a key, e.g. "user.name" and a value
-AddConfigEntryDialog_EnterValueMessage=Please enter a value
-AddConfigEntryDialog_KeyComponentsMessage=The key must have two or more components separated by "."
+AddConfigEntryDialog_DialogMessage=Please enter a key, e.g. "user.name" and a value.
+AddConfigEntryDialog_EnterValueMessage=Please enter a value.
+AddConfigEntryDialog_InvalidKeyMessage=Please enter a valid key: the first and the last component may contain only the letters [A-Za-z0-9] or the dash, and the last component must start with a letter.
+AddConfigEntryDialog_KeyComponentsMessage=The key must have two or more components separated by ".".
AddConfigEntryDialog_KeyLabel=&Key
-AddConfigEntryDialog_MustEnterKeyMessage=Please enter a key
+AddConfigEntryDialog_MustEnterKeyMessage=Please enter a key.
AddConfigEntryDialog_ValueLabel=&Value
AddRemotePage_EnterRemoteNameMessage=Please enter a remote name
AddRemotePage_RemoteNameAlreadyExistsError=Remote already exists

Back to the top