Author: markt
Date: Sat Feb 12 19:35:26 2011
New Revision: 1070139

URL: http://svn.apache.org/viewvc?rev=1070139&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50726
Ensure that the use of the genStringAsCharArray does not result in String 
constants that are too long for valid Java code.

Modified:
    tomcat/trunk/java/org/apache/jasper/compiler/Generator.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/jasper/compiler/Generator.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Generator.java?rev=1070139&r1=1070138&r2=1070139&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/Generator.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/Generator.java Sat Feb 12 
19:35:26 2011
@@ -1975,20 +1975,36 @@ class Generator {
                 } else {
                     caOut = charArrayBuffer.getOut();
                 }
-                String charArrayName = textMap.get(text);
-                if (charArrayName == null) {
-                    charArrayName = "_jspx_char_array_" + charArrayCount++;
-                    textMap.put(text, charArrayName);
-                    caOut.printin("static char[] ");
-                    caOut.print(charArrayName);
-                    caOut.print(" = ");
-                    caOut.print(quote(text));
-                    caOut.println(".toCharArray();");
+                // UTF-8 is up to 4 bytes per character
+                // String constants are limited to 64k bytes
+                // Limit string constants here to 16k characters
+                int textIndex = 0;
+                int textLength = text.length();
+                while (textIndex < textLength) {
+                    int len = 0;
+                    if (textLength - textIndex > 16384) {
+                        len = 16384;
+                    } else {
+                        len = textLength - textIndex;
+                    }
+                    String output = text.substring(textIndex, textIndex + len);
+                    String charArrayName = textMap.get(output);
+                    if (charArrayName == null) {
+                        charArrayName = "_jspx_char_array_" + charArrayCount++;
+                        textMap.put(output, charArrayName);
+                        caOut.printin("static char[] ");
+                        caOut.print(charArrayName);
+                        caOut.print(" = ");
+                        caOut.print(quote(output));
+                        caOut.println(".toCharArray();");
+                    }
+    
+                    n.setBeginJavaLine(out.getJavaLine());
+                    out.printil("out.write(" + charArrayName + ");");
+                    n.setEndJavaLine(out.getJavaLine());
+                    
+                    textIndex = textIndex + len;
                 }
-
-                n.setBeginJavaLine(out.getJavaLine());
-                out.printil("out.write(" + charArrayName + ");");
-                n.setEndJavaLine(out.getJavaLine());
                 return;
             }
 

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1070139&r1=1070138&r2=1070139&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Sat Feb 12 19:35:26 2011
@@ -93,6 +93,11 @@
         for web.xml does not trigger an error when Jasper parses the web.xml
         file. (markt)
       </fix>
+      <fix>
+        <bug>50726</bug>: Ensure that the use of the genStringAsCharArray does
+        not result in String constants that are too long for valid Java code.
+        (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Tribes">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to