Permalink
Browse files

Report module id as string and as double, in case of invalid values a…

…re passed to nativeRequire

Differential Revision: D6695769

fbshipit-source-id: b578b9d52ed711fb5a3e51717ac555fa8a232d7a
  • Loading branch information...
fromcelticpark authored and facebook-github-bot committed Jan 11, 2018
1 parent 702b7e8 commit 8f358a20881b61cf3256fa1e404b86d5f104932d
Showing with 27 additions and 15 deletions.
  1. +9 −15 ReactCommon/cxxreact/JSCUtils.cpp
  2. +9 −0 ReactCommon/jschelpers/Value.cpp
  3. +9 −0 ReactCommon/jschelpers/Value.h
@@ -2,6 +2,8 @@
#include "JSCUtils.h"
#include <folly/Conv.h>
namespace facebook {
namespace react {
@@ -17,28 +19,20 @@ std::pair<uint32_t, uint32_t> parseNativeRequireParameters(
const JSGlobalContextRef& context,
const JSValueRef arguments[],
size_t argumentCount) {
double moduleId = 0, bundleId = 0;
uint32_t moduleId = 0, bundleId = 0;
// use "getNumber" & "folly::to" to throw explicitely in case of an overflow
// error during conversion
if (argumentCount == 1) {
moduleId = Value(context, arguments[0]).asNumber();
moduleId = folly::to<uint32_t>(Value(context, arguments[0]).getNumberOrThrow());
} else if (argumentCount == 2) {
moduleId = Value(context, arguments[0]).asNumber();
bundleId = Value(context, arguments[1]).asNumber();
moduleId = folly::to<uint32_t>(Value(context, arguments[0]).getNumberOrThrow());
bundleId = folly::to<uint32_t>(Value(context, arguments[1]).getNumberOrThrow());
} else {
throw std::invalid_argument("Got wrong number of args");
}
if (moduleId < 0) {
throw std::invalid_argument(folly::to<std::string>("Received invalid module ID: ",
Value(context, arguments[0]).toString().str()));
}
if (bundleId < 0) {
throw std::invalid_argument(folly::to<std::string>("Received invalid bundle ID: ",
Value(context, arguments[1]).toString().str()));
}
return std::make_pair(static_cast<uint32_t>(bundleId), static_cast<uint32_t>(moduleId));
return std::make_pair(bundleId, moduleId);
}
}
@@ -191,6 +191,15 @@ Value Value::makeError(JSContextRef ctx, const char *error, const char *stack)
}
}
void Value::throwTypeException(const std::string &expectedType) const {
std::string wat("TypeError: Expected ");
wat += expectedType;
wat += ", instead got '";
wat += toString().str();
wat += "'";
throw JSException(wat.c_str());
}
Object::operator Value() const {
return Value(m_context, m_obj);
}
@@ -302,6 +302,13 @@ class Value : public noncopyable {
}
}
double getNumberOrThrow() const {
if (!isNumber()) {
throwTypeException("Number");
}
return JSC_JSValueToNumber(context(), m_value, nullptr);
}
int32_t asInteger() const {
return static_cast<int32_t>(asNumber());
}
@@ -355,7 +362,9 @@ class Value : public noncopyable {
JSContextRef m_context;
JSValueRef m_value;
void throwTypeException(const std::string &expectedType) const;
static JSValueRef fromDynamicInner(JSContextRef ctx, const folly::dynamic& obj);
};
} }

0 comments on commit 8f358a2

Please sign in to comment.