Don't assume JS integers are dynamic Ints

Reviewed By: kathryngray

Differential Revision: D5643016

fbshipit-source-id: 2e4e1bce013e16c286745dc2a9aa5ff251f7afdd
This commit is contained in:
Marc Horowitz 2017-08-18 14:43:28 -07:00 committed by Facebook Github Bot
parent 2292023a1b
commit f6de2e4a9b
3 changed files with 8 additions and 9 deletions

View File

@ -18,11 +18,11 @@ namespace react {
std::function<void(folly::dynamic)> makeCallback( std::function<void(folly::dynamic)> makeCallback(
std::weak_ptr<Instance> instance, const folly::dynamic& callbackId) { std::weak_ptr<Instance> instance, const folly::dynamic& callbackId) {
if (!callbackId.isInt()) { if (!callbackId.isNumber()) {
throw std::invalid_argument("Expected callback(s) as final argument"); throw std::invalid_argument("Expected callback(s) as final argument");
} }
auto id = callbackId.getInt(); auto id = callbackId.asInt();
return [winstance = std::move(instance), id](folly::dynamic args) { return [winstance = std::move(instance), id](folly::dynamic args) {
if (auto instance = winstance.lock()) { if (auto instance = winstance.lock()) {
instance->callJSCallback(id, std::move(args)); instance->callJSCallback(id, std::move(args));

View File

@ -44,12 +44,11 @@ std::vector<MethodCall> parseMethodCalls(folly::dynamic&& jsonData) throw(std::i
} }
if (jsonData.size() > REQUEST_CALLID) { if (jsonData.size() > REQUEST_CALLID) {
if (!jsonData[REQUEST_CALLID].isInt()) { if (!jsonData[REQUEST_CALLID].isNumber()) {
throw std::invalid_argument( throw std::invalid_argument(
folly::to<std::string>("Did not get valid calls back from JS: %s", folly::toJson(jsonData))); folly::to<std::string>("Did not get valid calls back from JS: %s", folly::toJson(jsonData)));
} else {
callId = jsonData[REQUEST_CALLID].getInt();
} }
callId = jsonData[REQUEST_CALLID].asInt();
} }
std::vector<MethodCall> methodCalls; std::vector<MethodCall> methodCalls;
@ -60,8 +59,8 @@ std::vector<MethodCall> parseMethodCalls(folly::dynamic&& jsonData) throw(std::i
} }
methodCalls.emplace_back( methodCalls.emplace_back(
moduleIds[i].getInt(), moduleIds[i].asInt(),
methodIds[i].getInt(), methodIds[i].asInt(),
std::move(params[i]), std::move(params[i]),
callId); callId);

View File

@ -51,8 +51,8 @@ TEST(Value, ToJSONString) {
EXPECT_TRUE(dyn.isObject()); EXPECT_TRUE(dyn.isObject());
auto val = dyn.at("a"); auto val = dyn.at("a");
ASSERT_NE(nullptr, val); ASSERT_NE(nullptr, val);
ASSERT_TRUE(val.isInt()); ASSERT_TRUE(val.isNumber());
EXPECT_EQ(4, val.getInt()); EXPECT_EQ(4, val.asInt());
EXPECT_EQ(4.0f, val.asDouble()); EXPECT_EQ(4.0f, val.asDouble());
JSC_JSGlobalContextRelease(ctx); JSC_JSGlobalContextRelease(ctx);