Index: /CKEditor/trunk/_source/plugins/selection/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/selection/plugin.js	(revision 7620)
+++ /CKEditor/trunk/_source/plugins/selection/plugin.js	(revision 7621)
@@ -264,4 +264,5 @@
 				{
 					var doc = editor.document,
+						outerDoc = CKEDITOR.document,
 						body = doc.getBody(),
 						html = doc.getDocumentElement();
@@ -431,5 +432,5 @@
 											// Handle drag directions.
 											textRng.setEndPoint(
-												textRng.compareEndPoints( 'StartToStart', rngEnd ) < 0 ?
+												startRng.compareEndPoints( 'StartToStart', rngEnd ) < 0 ?
 												'EndToEnd' :
 												'StartToStart',
@@ -439,4 +440,20 @@
 											textRng.select();
 										}
+									}
+
+									function removeListeners()
+									{
+										outerDoc.removeListener( 'mouseup', onSelectEnd );
+										html.removeListener( 'mouseup', onSelectEnd );
+									}
+
+									function onSelectEnd()
+									{
+
+										html.removeListener( 'mousemove', onHover );
+										removeListeners();
+
+										// Make it in effect on mouse up. (#9022)
+										textRng.select();
 									}
 
@@ -450,15 +467,10 @@
 										var textRng = body.$.createTextRange();
 										moveRangeToPoint( textRng, evt.$.x, evt.$.y );
+										// Records the dragging start of the above text range.
+										var startRng = textRng.duplicate();
 
 										html.on( 'mousemove', onHover );
-
-										html.on( 'mouseup', function( evt )
-										{
-											html.removeListener( 'mousemove', onHover );
-											evt.removeListener();
-
-											// Make it in effect on mouse up. (#9022)
-											textRng.select();
-										} );
+										outerDoc.on( 'mouseup', onSelectEnd );
+										html.on( 'mouseup', onSelectEnd );
 									}
 								});
@@ -468,24 +480,34 @@
 							if ( CKEDITOR.env.ie8 )
 							{
-								html.on( 'mousedown', function( evt ) {
-
+								html.on( 'mousedown', function( evt )
+								{
 									if ( evt.data.getTarget().is( 'html' ) )
 									{
-										html.on( 'mouseup', function( evt )
-										{
-											evt.removeListener();
-
-											// The event is not fired when clicking on the scrollbars,
-											// so we can safely check the following to understand
-											// whether the empty space following <body> has been clicked.
-												var sel = CKEDITOR.document.$.selection,
-													range = sel.createRange();
-												// The selection range is reported on host, but actually it should applies to the content doc.
-												if ( sel.type != 'None' && range.parentElement().ownerDocument == doc.$ )
-													range.select();
-										} );
+										// Limit the text selection mouse move inside of editable. (#9715)
+										outerDoc.on( 'mouseup', onSelectEnd );
+										html.on( 'mouseup', onSelectEnd )
 									}
 
 								});
+
+								function removeListeners()
+								{
+									outerDoc.removeListener( 'mouseup', onSelectEnd );
+									html.removeListener( 'mouseup', onSelectEnd );
+								}
+
+								function onSelectEnd()
+								{
+									removeListeners();
+
+									// The event is not fired when clicking on the scrollbars,
+									// so we can safely check the following to understand
+									// whether the empty space following <body> has been clicked.
+										var sel = CKEDITOR.document.$.selection,
+											range = sel.createRange();
+										// The selection range is reported on host, but actually it should applies to the content doc.
+										if ( sel.type != 'None' && range.parentElement().ownerDocument == doc.$ )
+											range.select();
+								}
 							}
 
