Reviewed by Darin.
authoradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 23 May 2005 21:09:51 +0000 (21:09 +0000)
committeradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 23 May 2005 21:09:51 +0000 (21:09 +0000)
        fix for <rdar://problem/4122661> Regression: 10.3.8-10.3.9: Next lesson doesn't work on Dale Carnegie Action Systems page

        * khtml/ecma/kjs_window.cpp: (KJS::WindowFunc::tryCall): added checks for NaN, in case it is passed into window.open for screenx, screeny, left, top, height, or width.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@9189 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/ecma/kjs_window.cpp

index d6286609729c53d82c2916631146391224dfb10d..98b0dd61a35bad9e9564e2d51e5e080a1bb4b278 100644 (file)
@@ -1,3 +1,11 @@
+2005-05-23  Adele Peterson  <adele@apple.com>
+
+        Reviewed by Darin.
+
+        fix for <rdar://problem/4122661> Regression: 10.3.8-10.3.9: Next lesson doesn't work on Dale Carnegie Action Systems page
+
+        * khtml/ecma/kjs_window.cpp: (KJS::WindowFunc::tryCall): added checks for NaN, in case it is passed into window.open for screenx, screeny, left, top, height, or width.
+
 2005-05-23  David Harrison  <harrison@apple.com>
 
         Reviewed by Darin.
index 66ade6d06f923d22333ed27ad717120729140dc4..ceaf25ccc63071af3e2dd15b1a0b267160527640 100644 (file)
 #include "css/css_stylesheetimpl.h"
 #include "misc/htmltags.h"
 
+// Must include <cmath> instead of <math.h> because of a bug in the
+// gcc 3.3 library version of <math.h> where if you include both
+// <cmath> and <math.h> the macros necessary for functions like
+// isnan are not defined.
+#include <cmath>
+
 using DOM::DocumentImpl;
 using DOM::DOMString;
 using DOM::ElementImpl;
@@ -79,6 +85,8 @@ using DOM::Position;
 
 using khtml::TypingCommand;
 
+using std::isnan;
+
 namespace KJS {
 
 ////////////////////// History Object ////////////////////////
@@ -1482,7 +1490,7 @@ Value WindowFunc::tryCall(ExecState *exec, Object &thisObj, const List &args)
             if (key == "left" || key == "screenx") {
               bool ok;
               double d = val.toDouble(&ok);
-              if (d != 0 || ok) {
+              if ((d != 0 || ok) && !isnan(d)) {
                 d += screen.x();
                 if (d < screen.x() || d > screen.right())
                  d = screen.x(); // only safe choice until size is determined
@@ -1494,7 +1502,7 @@ Value WindowFunc::tryCall(ExecState *exec, Object &thisObj, const List &args)
             } else if (key == "top" || key == "screeny") {
               bool ok;
               double d = val.toDouble(&ok);
-              if (d != 0 || ok) {
+              if ((d != 0 || ok) && !isnan(d)) {
                 d += screen.y();
                 if (d < screen.y() || d > screen.bottom())
                  d = screen.y(); // only safe choice until size is determined
@@ -1506,7 +1514,7 @@ Value WindowFunc::tryCall(ExecState *exec, Object &thisObj, const List &args)
             } else if (key == "height") {
               bool ok;
               double d = val.toDouble(&ok);
-              if (d != 0 || ok) {
+              if ((d != 0 || ok) && !isnan(d)) {
 #if !APPLE_CHANGES
                 d += 2*qApp->style().pixelMetric( QStyle::PM_DefaultFrameWidth ) + 2;
 #endif
@@ -1522,7 +1530,7 @@ Value WindowFunc::tryCall(ExecState *exec, Object &thisObj, const List &args)
             } else if (key == "width") {
               bool ok;
               double d = val.toDouble(&ok);
-              if (d != 0 || ok) {
+              if ((d != 0 || ok) && !isnan(d)) {
 #if !APPLE_CHANGES
                 d += 2*qApp->style().pixelMetric( QStyle::PM_DefaultFrameWidth ) + 2;
 #endif