8
0
Pārlūkot izejas kodu

Added validation for Range.

Oskar Wrobel 9 gadi atpakaļ
vecāks
revīzija
9472153c14

+ 8 - 0
packages/ckeditor5-engine/src/model/selection.js

@@ -126,6 +126,10 @@ export default class Selection {
 	 * or backward - from end to start (`true`). Defaults to `false`.
 	 */
 	addRange( range, isBackward ) {
+		if ( !( range instanceof Range ) ) {
+			throw new CKEditorError( 'model-selection-invalid-range: Invalid Range.' );
+		}
+
 		this._pushRange( range );
 		this._lastRangeBackward = !!isBackward;
 
@@ -205,6 +209,10 @@ export default class Selection {
 		this._ranges = [];
 
 		for ( let range of newRanges ) {
+			if ( !( range instanceof Range ) ) {
+				throw new CKEditorError( 'model-selection-invalid-range: Invalid Range.' );
+			}
+
 			this._pushRange( range );
 		}
 

+ 8 - 0
packages/ckeditor5-engine/src/view/selection.js

@@ -129,6 +129,10 @@ export default class Selection {
 	 * @param {engine.view.Range} range
 	 */
 	addRange( range, isBackward ) {
+		if ( !( range instanceof Range ) ) {
+			throw new CKEditorError( 'view-selection-invalid-range: Invalid Range.' );
+		}
+
 		this._pushRange( range );
 		this._lastRangeBackward = !!isBackward;
 		this.fire( 'change' );
@@ -259,6 +263,10 @@ export default class Selection {
 		this._ranges = [];
 
 		for ( let range of newRanges ) {
+			if ( !( range instanceof Range ) ) {
+				throw new CKEditorError( 'view-selection-invalid-range: Invalid Range.' );
+			}
+
 			this._pushRange( range );
 		}
 

+ 12 - 0
packages/ckeditor5-engine/tests/model/selection.js

@@ -103,6 +103,12 @@ describe( 'Selection', () => {
 	} );
 
 	describe( 'addRange', () => {
+		it( 'should throw an error when range is invalid', () => {
+			expect( () => {
+				selection.addRange( { invalid: 'Range' } );
+			} ).to.throw( CKEditorError, 'model-selection-invalid-range: Invalid Range.' );
+		} );
+
 		it( 'should copy added ranges and store multiple ranges', () => {
 			selection.addRange( liveRange );
 			selection.addRange( range );
@@ -463,6 +469,12 @@ describe( 'Selection', () => {
 			oldRanges = selection._ranges;
 		} );
 
+		it( 'should throw an error when range is invalid', () => {
+			expect( () => {
+				selection.setRanges( [ { invalid: 'range' } ] );
+			} ).to.throw( CKEditorError, 'model-selection-invalid-range: Invalid Range.' );
+		} );
+
 		it( 'should remove all ranges and add given ranges', () => {
 			selection.setRanges( newRanges );
 

+ 12 - 0
packages/ckeditor5-engine/tests/view/selection.js

@@ -144,6 +144,12 @@ describe( 'Selection', () => {
 	} );
 
 	describe( 'addRange', () => {
+		it( 'should throw an error when range is invalid', () => {
+			expect( () => {
+				selection.addRange( { invalid: 'range' } );
+			} ).to.throw( CKEditorError, 'view-selection-invalid-range: Invalid Range.' );
+		} );
+
 		it( 'should add range to selection ranges', () => {
 			selection.addRange( range1 );
 			expect( selection._ranges[ 0 ].isEqual( range1 ) ).to.be.true;
@@ -328,6 +334,12 @@ describe( 'Selection', () => {
 	} );
 
 	describe( 'setRanges', () => {
+		it( 'should throw an error when range is invalid', () => {
+			expect( () => {
+				selection.setRanges( [ { invalid: 'range' } ] );
+			} ).to.throw( CKEditorError, 'view-selection-invalid-range: Invalid Range.' );
+		} );
+
 		it( 'should add ranges and fire change event', ( done ) => {
 			selection.addRange( range1 );