@@ -575,7 +575,7 @@ define(function (require, exports, module) {
575575
576576 let fixIDCounter = 1 ;
577577 let documentFixes = new Map ( ) , lastDocumentScanTimeStamp ;
578- function _registerNewFix ( editor , fix , providerName ) {
578+ function _registerNewFix ( editor , fix , providerName , maxOffset ) {
579579 if ( ! editor || ! fix || ! fix . rangeOffset ) {
580580 return null ;
581581 }
@@ -585,6 +585,9 @@ define(function (require, exports, module) {
585585 lastDocumentScanTimeStamp = editor . document . lastChangeTimestamp ;
586586 documentFixes . clear ( ) ;
587587 }
588+ if ( _isInvalidFix ( fix , maxOffset ) ) {
589+ return null ;
590+ }
588591 fixIDCounter ++ ;
589592 fix . providerName = providerName ;
590593 documentFixes . set ( `${ fixIDCounter } ` , fix ) ;
@@ -602,6 +605,7 @@ define(function (require, exports, module) {
602605 if ( ! ( editor && resultProviderEntries && resultProviderEntries . length ) ) {
603606 return ;
604607 }
608+ const maxOffset = editor . document . getText ( ) . length ;
605609 editor . operation ( function ( ) {
606610 editor . off ( "viewportChange.codeInspection" ) ;
607611 editor . on ( "viewportChange.codeInspection" , _editorVieportChangeHandler ) ;
@@ -618,7 +622,7 @@ define(function (require, exports, module) {
618622 if ( _shouldMarkTokenAtPosition ( editor , error ) ) {
619623 let mark ;
620624 const markOptions = _getMarkOptions ( error ) ;
621- const fixID = _registerNewFix ( editor , error . fix , resultProvider . provider . name ) ;
625+ const fixID = _registerNewFix ( editor , error . fix , resultProvider . provider . name , maxOffset ) ;
622626 if ( fixID ) {
623627 markOptions . metadata = fixID ;
624628 error . fix . id = fixID ;
@@ -1009,16 +1013,21 @@ define(function (require, exports, module) {
10091013 description : Strings . DESCRIPTION_USE_PREFERED_ONLY
10101014 } ) ;
10111015
1016+ function _isInvalidFix ( fixDetails , maxOffset ) {
1017+ return ( ! _ . isNumber ( fixDetails . rangeOffset . start ) || ! _ . isNumber ( fixDetails . rangeOffset . end ) ||
1018+ fixDetails . rangeOffset . start < 0 || fixDetails . rangeOffset . end < 0 ||
1019+ fixDetails . rangeOffset . start > maxOffset || fixDetails . rangeOffset . end > maxOffset ||
1020+ typeof fixDetails . replaceText !== "string" ) ;
1021+ }
1022+
10121023 function _fixProblem ( fixID ) {
10131024 const fixDetails = documentFixes . get ( fixID ) ;
10141025 const editor = EditorManager . getCurrentFullEditor ( ) ;
10151026 const maxOffset = editor . document . getText ( ) . length ;
1016- if ( fixDetails . rangeOffset . start < 0 || fixDetails . rangeOffset . end < 0 ||
1017- fixDetails . rangeOffset . start > maxOffset || fixDetails . rangeOffset . end > maxOffset ) {
1018- Dialogs . showErrorDialog ( Strings . CANNOT_FIX_TITLE ,
1019- StringUtils . format ( Strings . CANNOT_FIX_INVALID_MESSAGE , fixDetails . providerName ) ) ;
1020- } else if ( ! editor || ! fixDetails || editor . document . lastChangeTimestamp !== lastDocumentScanTimeStamp ) {
1027+ if ( ! editor || ! fixDetails || editor . document . lastChangeTimestamp !== lastDocumentScanTimeStamp ) {
10211028 Dialogs . showErrorDialog ( Strings . CANNOT_FIX_TITLE , Strings . CANNOT_FIX_MESSAGE ) ;
1029+ } else if ( _isInvalidFix ( fixDetails , maxOffset ) ) {
1030+ console . error ( "Invalid fix:" , fixDetails ) ; // this should never happen as we filter the fix while inserting
10221031 } else {
10231032 const from = editor . posFromIndex ( fixDetails . rangeOffset . start ) ,
10241033 to = editor . posFromIndex ( fixDetails . rangeOffset . end ) ;
@@ -1039,7 +1048,11 @@ define(function (require, exports, module) {
10391048 return ;
10401049 }
10411050 const replacements = [ ] ;
1051+ const maxOffset = editor . document . getText ( ) . length ;
10421052 for ( let fixDetails of documentFixes . values ( ) ) {
1053+ if ( _isInvalidFix ( fixDetails , maxOffset ) ) {
1054+ console . error ( "Invalid fix:" , fixDetails ) ; // this should never happen
1055+ }
10431056 replacements . push ( {
10441057 from : editor . posFromIndex ( fixDetails . rangeOffset . start ) ,
10451058 to : editor . posFromIndex ( fixDetails . rangeOffset . end ) ,
0 commit comments