Index: _source/plugins/selection/plugin.js
===================================================================
--- _source/plugins/selection/plugin.js	(revision 4876)
+++ _source/plugins/selection/plugin.js	Wed Jan 27 20:32:25 CST 2010
@@ -486,8 +486,23 @@
 						// IE report line break as CRLF with range.text but
 						// only LF with textnode.nodeValue, normalize them to avoid
 						// breaking character counting logic below. (#3949)
-						var distance = testRange.text.replace( /(\r\n|\r)/g, '\n' ).length;
+						var textInRange = testRange.text,
+								htmlInRange = testRange.htmlText,
+								distance = textInRange.replace( /(\r\n|\r)/g, '\n' ).length;
 
+						// Sometimes the above distance is incorrectly counting content within
+						// uneditable elements (e.g. [<select><option>text</option></select>]
+						// will be counted up to 4), counting again in with different approach. (#4611)
+						if( htmlInRange.length != textInRange.length )
+						{
+							for( var characters = 0; testRange.text.length
+										&& testRange.compareEndPoints( 'EndToStart', range ); characters++ )
+								testRange.moveEnd( 'character', -1 );
+
+							distance = Math.min( distance, characters );
+						}
+
+
 						while ( distance > 0 )
 							distance -= siblings[ --i ].nodeValue.length;
 

