@@ -390,7 +390,7 @@ private void serializeLength(StringBuffer buffer, int length) {
390390buffer[buffer.length] = 's';
391391buffer[buffer.length] = String.fromCharCode (baseChar - 1);
392392} else {
393- var normal = /^[\u0000-\u00ff ]*$/.test(s);
393+ var normal = /^[\r\n\t\u0020-\u007e ]*$/.test(s);
394394if (normal) {
395395buffer[buffer.length] = 's';
396396} else {
@@ -459,6 +459,7 @@ private void serializeString(StringBuffer buffer, String s) throws UnsupportedEn
459459while (index < length) {
460460var c1 = str.charCodeAt (index++);
461461var l1 = c1 - baseChar;
462+ if (l1 < 0) return;
462463var fieldName = str.substring (index, index + l1);
463464index += l1;
464465var c2 = str.charAt (index++);
@@ -476,6 +477,7 @@ private void serializeString(StringBuffer buffer, String s) throws UnsupportedEn
476477if (l2 == -2) {
477478var c4 = str.charCodeAt(index++);
478479var l3 = c4 - baseChar;
480+ if (l3 < 0) return;
479481l2 = parseInt(str.substring(index, index + l3));
480482if (l2 > 0x4000) { // 16 * 1024
481483throw new RuntimeException("Array size reaches the limit of Java2Script Simple RPC!");
@@ -502,7 +504,9 @@ private void serializeString(StringBuffer buffer, String s) throws UnsupportedEn
502504} else if (l3 == -2) {
503505var c6 = str.charCodeAt (index++);
504506var l4 = c6 - baseChar;
507+ if (l4 < 0) return;
505508var l5 = parseInt (str.substring( index, index + l4));
509+ if (l5 < 0) return;
506510index += l4;
507511s = str.substring (index, index + l5);
508512index += l5;
@@ -538,7 +542,9 @@ private void serializeString(StringBuffer buffer, String s) throws UnsupportedEn
538542} else if (l2 == -2) {
539543var c4 = str.charCodeAt(index++);
540544var l3 = c4 - baseChar;
545+ if (l3 < 0) return;
541546var l4 = parseInt(str.substring(index, index + l3));
547+ if (l4 < 0) return;
542548index += l3;
543549s = str.substring(index, index + l4);
544550index += l4;
@@ -599,6 +605,7 @@ public void deserialize(String str) {
599605while (index <length ) {
600606char c1 =str .charAt (index ++);
601607int l1 =c1 -baseChar ;
608+ if (l1 <0 )return ;
602609String fieldName =str .substring (index ,index +l1 );
603610index +=l1 ;
604611char c2 =str .charAt (index ++);
@@ -617,6 +624,7 @@ public void deserialize(String str) {
617624if (l2 == -2 ) {
618625char c4 =str .charAt (index ++);
619626int l3 =c4 -baseChar ;
627+ if (l3 <0 )return ;
620628l2 =Integer .parseInt (str .substring (index ,index +l3 ));
621629if (l2 >0x4000 ) {// 16 * 1024
622630/*
@@ -645,7 +653,9 @@ public void deserialize(String str) {
645653}else if (l3 == -2 ) {
646654char c6 =str .charAt (index ++);
647655int l4 =c6 -baseChar ;
656+ if (l4 <0 )return ;
648657int l5 =Integer .parseInt (str .substring (index ,index +l4 ));
658+ if (l5 <0 )return ;
649659index +=l4 ;
650660ss [i ] =str .substring (index ,index +l5 );
651661index +=l5 ;
@@ -761,7 +771,9 @@ public void deserialize(String str) {
761771}else if (l2 == -2 ) {
762772char c4 =str .charAt (index ++);
763773int l3 =c4 -baseChar ;
774+ if (l3 <0 )return ;
764775int l4 =Integer .parseInt (str .substring (index ,index +l3 ));
776+ if (l4 <0 )return ;
765777index +=l3 ;
766778s =str .substring (index ,index +l4 );
767779index +=l4 ;