Index: trunk/src/org/openstreetmap/josm/data/osm/Changeset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Changeset.java	(revision 4507)
+++ trunk/src/org/openstreetmap/josm/data/osm/Changeset.java	(revision 4508)
@@ -17,4 +17,8 @@
  */
 public final class Changeset implements Tagged {
+    
+    /** The maximum changeset comment text length allowed by API 0.6 **/
+    public static final int MAX_COMMENT_LENGTH = 255;
+    
     /** the changeset id */
     private int id;
Index: trunk/src/org/openstreetmap/josm/gui/DocumentSizeFilter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/DocumentSizeFilter.java	(revision 4508)
+++ trunk/src/org/openstreetmap/josm/gui/DocumentSizeFilter.java	(revision 4508)
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Oracle or the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.openstreetmap.josm.gui;
+ 
+import javax.swing.text.*;
+import java.awt.Toolkit;
+ 
+public class DocumentSizeFilter extends DocumentFilter {
+    int maxCharacters;
+ 
+    public DocumentSizeFilter(int maxChars) {
+        maxCharacters = maxChars;
+    }
+ 
+    public void insertString(FilterBypass fb, int offs,
+                             String str, AttributeSet a)
+        throws BadLocationException {
+ 
+        //This rejects the entire insertion if it would make
+        //the contents too long. Another option would be
+        //to truncate the inserted string so the contents
+        //would be exactly maxCharacters in length.
+        if ((fb.getDocument().getLength() + str.length()) <= maxCharacters)
+            super.insertString(fb, offs, str, a);
+        else
+            Toolkit.getDefaultToolkit().beep();
+    }
+     
+    public void replace(FilterBypass fb, int offs,
+                        int length,
+                        String str, AttributeSet a)
+        throws BadLocationException {
+        //This rejects the entire replacement if it would make
+        //the contents too long. Another option would be
+        //to truncate the replacement string so the contents
+        //would be exactly maxCharacters in length.
+        if ((fb.getDocument().getLength() + str.length()
+             - length) <= maxCharacters)
+            super.replace(fb, offs, length, str, a);
+        else
+            Toolkit.getDefaultToolkit().beep();
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java	(revision 4507)
+++ trunk/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java	(revision 4508)
@@ -24,4 +24,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -50,4 +51,5 @@
         hcbUploadComment = new HistoryComboBox();
         hcbUploadComment.setToolTipText(tr("Enter an upload comment"));
+        hcbUploadComment.setMaxTextLength(Changeset.MAX_COMMENT_LENGTH);
         List<String> cmtHistory = new LinkedList<String>(Main.pref.getCollection(HISTORY_KEY, new LinkedList<String>()));
         // we have to reverse the history, because ComboBoxHistory will reverse it again
Index: trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java	(revision 4507)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java	(revision 4508)
@@ -14,4 +14,5 @@
 import javax.swing.JList;
 import javax.swing.ListCellRenderer;
+import javax.swing.text.AbstractDocument;
 import javax.swing.text.AttributeSet;
 import javax.swing.text.BadLocationException;
@@ -21,4 +22,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.DocumentSizeFilter;
 
 /**
@@ -149,4 +151,11 @@
         setMaximumRowCount(maxsize);
     }
+    
+    public void setMaxTextLength(int length)
+    {
+        JTextComponent editor = (JTextComponent) this.getEditor().getEditorComponent();
+        AbstractDocument doc = (AbstractDocument) editor.getDocument();
+        doc.setDocumentFilter(new DocumentSizeFilter(length));
+    }
 
     /**
