@@ -517,8 +517,9 @@ protected LinesToCharsResult diff_linesToChars(String text1, String text2) {
517517 // So we'll insert a junk entry to avoid generating a null character.
518518 lineArray .add ("" );
519519
520- String chars1 = diff_linesToCharsMunge (text1 , lineArray , lineHash );
521- String chars2 = diff_linesToCharsMunge (text2 , lineArray , lineHash );
520+ // Allocate 2/3rds of the space for text1, the rest for text2.
521+ String chars1 = diff_linesToCharsMunge (text1 , lineArray , lineHash , 40000 );
522+ String chars2 = diff_linesToCharsMunge (text2 , lineArray , lineHash , 65535 );
522523 return new LinesToCharsResult (chars1 , chars2 , lineArray );
523524 }
524525
@@ -528,10 +529,11 @@ protected LinesToCharsResult diff_linesToChars(String text1, String text2) {
528529 * @param text String to encode.
529530 * @param lineArray List of unique strings.
530531 * @param lineHash Map of strings to indices.
532+ * @param maxLines Maximum length of lineArray.
531533 * @return Encoded string.
532534 */
533535 private String diff_linesToCharsMunge (String text , List <String > lineArray ,
534- Map <String , Integer > lineHash ) {
536+ Map <String , Integer > lineHash , int maxLines ) {
535537 int lineStart = 0 ;
536538 int lineEnd = -1 ;
537539 String line ;
@@ -549,7 +551,7 @@ private String diff_linesToCharsMunge(String text, List<String> lineArray,
549551 if (lineHash .containsKey (line )) {
550552 chars .append (String .valueOf ((char ) (int ) lineHash .get (line )));
551553 } else {
552- if (lineArray .size () == 65535 ) {
554+ if (lineArray .size () == maxLines ) {
553555 // Bail out at 65535 because
554556 // String.valueOf((char) 65536).equals(String.valueOf(((char) 0)))
555557 line = text .substring (lineStart );
0 commit comments