errael opened a new pull request #2117:
URL: https://github.com/apache/netbeans/pull/2117


   …tion
   
   Simple fix. The problem occurs when a hint changes Bundle.properties. Hint 
processing wants to change a line: delete some content, insert "\r\n". The code 
assumes that 2 characters are inserted, but the "\r" is filtered out. So the 
delete, after the insert, corrupts the properties file.
   
   The bug report includes a small project to reproduce the problem.
   
   The bug was introduced by the following change (for a different issue). 
Before this change, the last step was to insert the "\r\n" so the difference in 
length didn't matter.
   ```
   /f/repos/main-silver/java.source.base
   $ hg log -r 095e4043efa0 
src/org/netbeans/api/java/source/ModificationResult.java
   changeset:   279147:095e4043efa0
   branch:      server_split
   parent:      279146:6e4b43cb7725
   parent:      277049:d05de673f3a8
   user:        Svata Dedic <[email protected]>
   date:        Wed Aug 27 15:42:57 2014 +0200
   summary:     Manual merge of jet-main/trunk since approx 22 Apr
   
   
   /f/repos/main-silver/java.source.base
   $ hg diff -c 095e4043efa0 
src/org/netbeans/api/java/source/ModificationResult.java
   diff --git 
a/java.source.base/src/org/netbeans/api/java/source/ModificationResult.java 
b/java.source.base/src/org/netbeans/api/java/source/ModificationResult.java
   --- 
a/java.source.base/src/org/netbeans/api/java/source/ModificationResult.java
   +++ 
b/java.source.base/src/org/netbeans/api/java/source/ModificationResult.java
   @@ -428,10 +428,18 @@
                case REMOVE:
                    doc.remove(diff.getStartPosition().getOffset(), 
diff.getEndPosition().getOffset() - diff.getStartPosition().getOffset());
                    break;
   -            case CHANGE:
   -                doc.remove(diff.getStartPosition().getOffset(), 
diff.getEndPosition().getOffset() - diff.getStartPosition().getOffset());
   -                doc.insertString(diff.getStartPosition().getOffset(), 
diff.getNewText(), null);
   +            case CHANGE: {
   +                // first insert the new content, THEN remove the old one. 
In situations where the content AFTER the
   +                // change is not writable this ordering allows to replace 
the content, but if we first delete,
   +                // replacement cannot be inserted into the nonwritable area.
   +                int delta = diff.getNewText().length();
   +                int offs = diff.getStartPosition().getOffset();
   +                int removeLen = diff.getEndPosition().getOffset() - offs;
   +
   +                doc.insertString(offs, diff.getNewText(), null);
   +                doc.remove(delta + offs, removeLen);
                    break;
   +            }
            }
        }
   ```
   
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to