Fix float/double crash on Firefox with max values.
1) Fix debug printing code from %f (which can overflow a buffer) to %g (which won't).
2) Compile out more debugging code anyway to avoid calling Value.toString() at all.
Review by: jat (desk)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7205 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/plugins/common/Value.h b/plugins/common/Value.h
index 4401893..bcea639 100644
--- a/plugins/common/Value.h
+++ b/plugins/common/Value.h
@@ -301,7 +301,7 @@
}
std::string toString() const {
- char buf[30];
+ char buf[64];
switch (type) {
case NULL_TYPE:
return "null";
@@ -326,10 +326,10 @@
static_cast<long long>(getLong()));
return std::string(buf);
case FLOAT:
- snprintf(buf, sizeof(buf), "float(%f)", getFloat());
+ snprintf(buf, sizeof(buf), "float(%g)", getFloat());
return std::string(buf);
case DOUBLE:
- snprintf(buf, sizeof(buf), "double(%lf)", getDouble());
+ snprintf(buf, sizeof(buf), "double(%g)", getDouble());
return std::string(buf);
case STRING:
snprintf(buf, sizeof(buf), "string(%.20s)", getString().c_str());
@@ -381,7 +381,10 @@
};
inline Debug::DebugStream& operator<<(Debug::DebugStream& dbg, const Value& val) {
- return dbg << val.toString();
+ if (dbg.isActive()) {
+ dbg << val.toString();
+ }
+ return dbg;
}
#endif
diff --git a/user/test/com/google/gwt/dev/jjs/test/HostedTest.java b/user/test/com/google/gwt/dev/jjs/test/HostedTest.java
index 73bd9bf..fdc19cf 100644
--- a/user/test/com/google/gwt/dev/jjs/test/HostedTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/HostedTest.java
@@ -276,12 +276,7 @@
assertEquals("VAL3-foo", TestEnum.VAL3.foo());
}
- /**
- * Returning Float.MAX_VALUE or Double.MAX_VALUE causes firefox to crash on
- * Windows in dev mode
- * TODO (jat): Enable this test before shipping GWT 2.0.
- */
- public void disabledTestFloat() {
+ public void testFloat() {
storeFloat(Float.MIN_VALUE);
float f = getFloat();
assertTrue(f == Float.MIN_VALUE);
@@ -415,12 +410,8 @@
/**
* More test cases resulting from issue 2426 to show that primitives can be
* passed through JSNI methods unmolested.
- *
- * Returning Float.MAX_VALUE or Double.MAX_VALUE causes firefox to crash on
- * Windows in dev mode
- * TODO(jat): Enable this test before shipping GWT 2.0.
*/
- public void disabledTestJsniPassthroughPrimitives() {
+ public void testJsniPassthroughPrimitives() {
class Inner {
native boolean nativeBoolean(boolean param) /*-{
return param;