mirror of
https://github.com/status-im/react-native.git
synced 2025-01-14 03:26:07 +00:00
Report module id as string and as double, in case of invalid values are passed to nativeRequire
Differential Revision: D6695769 fbshipit-source-id: b578b9d52ed711fb5a3e51717ac555fa8a232d7a
This commit is contained in:
parent
702b7e877e
commit
8f358a2088
@ -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 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
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 @@ private:
|
||||
JSContextRef m_context;
|
||||
JSValueRef m_value;
|
||||
|
||||
void throwTypeException(const std::string &expectedType) const;
|
||||
static JSValueRef fromDynamicInner(JSContextRef ctx, const folly::dynamic& obj);
|
||||
|
||||
};
|
||||
|
||||
} }
|
||||
|
Loading…
x
Reference in New Issue
Block a user