@@ -389,39 +389,55 @@ private String prepareScriptRequest(HttpServletRequest req, HttpServletResponse
389
389
390
390
// store request in session before the request is completed
391
391
HttpSession session = req .getSession ();
392
+
392
393
String attrName = "jzn" + scriptRequestID ;
393
394
String attrTime = "jzt" + scriptRequestID ;
394
- Object attr = session .getAttribute (attrName );
395
395
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
+ }
405
410
}
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
+ }
417
427
}
418
428
}
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 ;
424
439
}
440
+
425
441
StringBuffer buf = new StringBuffer ();
426
442
for (int i = 0 ; i < parts .length ; i ++) {
427
443
buf .append (parts [i ]);
0 commit comments