[BUGFIX] Solve stackoverflow in prototype in IE8 08/29908/2
authorJigal van Hemert <jigal.van.hemert@typo3.org>
Fri, 25 Apr 2014 10:39:59 +0000 (12:39 +0200)
committerOliver Hader <oliver.hader@typo3.org>
Thu, 8 May 2014 10:29:56 +0000 (12:29 +0200)
The reason for this behaviour is the combination of prototype.js
and ExtJS. The ExtJS defer() method takes precedence. Calling the
defer() method without any arguments would have resulted in using
a default value of "0.01" seconds in standalone prototype.js, but
results in directly calling the submitted function.

The stack overflow is caused by not delaying the function call
and thus ending in a recursive endless loop.

Resolves: #58187
Releases: 6.2, 6.1, 6.0, 4.7, 4.5
Change-Id: I6db191ff67a3e869072877936d949fc733cda74f
Reviewed-on: https://review.typo3.org/29908
Reviewed-by: Oliver Hader
Tested-by: Oliver Hader
typo3/contrib/prototype/prototype.js

index 37dd39a..f1f9c2d 100644 (file)
@@ -6784,7 +6784,9 @@ Form.EventObserver = Class.create(Abstract.EventObserver, {
     try {
       document.documentElement.doScroll('left');
     } catch (e) {
-      TIMER = pollDoScroll.defer();
+      // modified defer() argument value
+      // @see http://forge.typo3.org/issues/58187
+      TIMER = pollDoScroll.defer(0.01);
       return;
     }
 
@@ -6795,7 +6797,9 @@ Form.EventObserver = Class.create(Abstract.EventObserver, {
     document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
   } else {
     document.attachEvent('onreadystatechange', checkReadyState);
-    if (window == top) TIMER = pollDoScroll.defer();
+    // modified defer() argument value
+    // @see http://forge.typo3.org/issues/58187
+    if (window == top) TIMER = pollDoScroll.defer(0.01);
   }
 
   Event.observe(window, 'load', fireContentLoadedEvent);