@@ -389,39 +389,55 @@ private String prepareScriptRequest(HttpServletRequest req, HttpServletResponse
389389
390390 // store request in session before the request is completed
391391 HttpSession session = req .getSession ();
392+
392393 String attrName = "jzn" + scriptRequestID ;
393394 String attrTime = "jzt" + scriptRequestID ;
394- Object attr = session .getAttribute (attrName );
395395 String [] parts = null ;
396- if (attr == null ) {
397- parts = new String [partsCount ];
398- session .setAttribute (attrName , parts );
399- session .setAttribute (attrTime , new Date ());
400- } else { // attr instanceof String[]
401- parts = (String []) attr ;
402- if (partsCount != parts .length ) {
403- resp .sendError (HttpServletResponse .SC_BAD_REQUEST );
404- return null ;
396+
397+ boolean badRequest = false ;
398+ boolean toContinue = false ;
399+ synchronized (session ) {
400+ Object attr = session .getAttribute (attrName );
401+ if (attr == null ) {
402+ parts = new String [partsCount ];
403+ session .setAttribute (attrName , parts );
404+ session .setAttribute (attrTime , new Date ());
405+ } else { // attr instanceof String[]
406+ parts = (String []) attr ;
407+ if (partsCount != parts .length ) {
408+ badRequest = true ;
409+ }
405410 }
406- }
407- parts [curPart - 1 ] = request ;
408- for (int i = 0 ; i < parts .length ; i ++) {
409- if (parts [i ] == null ) {
410- // not completed yet! just response and wait next request.
411-
412- resp .setContentType ("text/javascript" );
413- //resp.setCharacterEncoding("utf-8");
414- resp .getWriter ().write ("net.sf.j2s.ajax.SimpleRPCRequest" +
415- ".xssNotify(\" " + scriptRequestID + "\" , \" continue\" );" );
416- return null ;
411+ if (!badRequest ) {
412+ synchronized (parts ) {
413+ parts [curPart - 1 ] = request ;
414+ for (int i = 0 ; i < parts .length ; i ++) {
415+ if (parts [i ] == null ) {
416+ // not completed yet! just response and wait next request.
417+ toContinue = true ;
418+ break ;
419+ }
420+ }
421+ }
422+ if (!toContinue ) {
423+ // request is completed. return the request
424+ session .removeAttribute (attrName );
425+ session .removeAttribute (attrTime );
426+ }
417427 }
418428 }
419-
420- // request is completed. return the request
421- synchronized (session ) {
422- session .removeAttribute (attrName );
423- session .removeAttribute (attrTime );
429+ if (badRequest ) {
430+ resp .sendError (HttpServletResponse .SC_BAD_REQUEST );
431+ return null ;
432+ }
433+ if (toContinue ) {
434+ resp .setContentType ("text/javascript" );
435+ //resp.setCharacterEncoding("utf-8");
436+ resp .getWriter ().write ("net.sf.j2s.ajax.SimpleRPCRequest" +
437+ ".xssNotify(\" " + scriptRequestID + "\" , \" continue\" );" );
438+ return null ;
424439 }
440+
425441 StringBuffer buf = new StringBuffer ();
426442 for (int i = 0 ; i < parts .length ; i ++) {
427443 buf .append (parts [i ]);
0 commit comments