mirror of
https://gitee.com/openharmony/arkcompiler_ets_runtime
synced 2024-10-07 08:03:29 +00:00
add JS_TERMINATION_ERROR and exceed limit Size jscrash
Signed-off-by: wangzhaoyong <wangzhaoyong@huawei.com> Change-Id: I0e2ae900f941ed05e426e5831a71782d9f01915a
This commit is contained in:
parent
8d2c962e9c
commit
64a34798a5
@ -1100,13 +1100,6 @@ JSDeserializer::~JSDeserializer()
|
||||
JSHandle<JSTaggedValue> JSDeserializer::Deserialize()
|
||||
{
|
||||
ECMA_BYTRACE_NAME(HITRACE_TAG_ARK, "Deserialize dataSize: " + std::to_string(end_ - begin_));
|
||||
size_t maxSerializerSize = thread_->GetEcmaVM()->GetEcmaParamConfiguration().GetMaxJSSerializerSize();
|
||||
size_t dataSize = end_ - begin_;
|
||||
if (dataSize > maxSerializerSize) {
|
||||
LOG_ECMA(ERROR) << "The Serialization data size has exceed limit Size, current size is: " << dataSize <<
|
||||
" max size is: " << maxSerializerSize;
|
||||
return JSHandle<JSTaggedValue>();
|
||||
}
|
||||
JSHandle<JSTaggedValue> res = DeserializeJSTaggedValue();
|
||||
return res;
|
||||
}
|
||||
@ -2008,10 +2001,16 @@ bool Serializer::WriteValue(
|
||||
return false;
|
||||
}
|
||||
if (!valueSerializer_.SerializeJSTaggedValue(value)) {
|
||||
valueSerializer_.ReleaseBuffer();
|
||||
return false;
|
||||
}
|
||||
size_t maxSerializerSize = thread->GetEcmaVM()->GetEcmaParamConfiguration().GetMaxJSSerializerSize();
|
||||
if (data_->GetSize() > maxSerializerSize) {
|
||||
LOG_ECMA(ERROR) << "The Serialization data size has exceed limit Size, current size is: " << data_->GetSize()
|
||||
<< " max size is: " << maxSerializerSize;
|
||||
valueSerializer_.ReleaseBuffer();
|
||||
return false;
|
||||
}
|
||||
// clear transfer obj set after serialization
|
||||
valueSerializer_.ClearTransferSet();
|
||||
std::pair<uint8_t*, size_t> pair = valueSerializer_.ReleaseBuffer();
|
||||
data_->value_.reset(pair.first);
|
||||
data_->dataSize_ = pair.second;
|
||||
|
@ -108,7 +108,12 @@ enum class SerializationUID : uint8_t {
|
||||
class JSSerializer {
|
||||
public:
|
||||
explicit JSSerializer(JSThread *thread) : thread_(thread) {}
|
||||
~JSSerializer() = default;
|
||||
~JSSerializer()
|
||||
{
|
||||
// clear transfer obj set after serialization
|
||||
transferDataSet_.clear();
|
||||
}
|
||||
|
||||
bool SerializeJSTaggedValue(const JSHandle<JSTaggedValue> &value);
|
||||
void InitTransferSet(CUnorderedSet<uintptr_t> transferDataSet);
|
||||
void ClearTransferSet();
|
||||
|
@ -33,12 +33,6 @@ namespace panda::ecmascript {
|
||||
JSHandle<JSTaggedValue> BaseDeserializer::ReadValue()
|
||||
{
|
||||
ECMA_BYTRACE_NAME(HITRACE_TAG_ARK, "Deserialize dataSize: " + std::to_string(data_->Size()));
|
||||
size_t maxSerializerSize = thread_->GetEcmaVM()->GetEcmaParamConfiguration().GetMaxJSSerializerSize();
|
||||
if (data_->Size() > maxSerializerSize) {
|
||||
LOG_ECMA(ERROR) << "The serialization data size has exceed limit Size, current size is: " << data_->Size()
|
||||
<< " max size is: " << maxSerializerSize;
|
||||
return JSHandle<JSTaggedValue>();
|
||||
}
|
||||
AllocateToDifferentSpaces();
|
||||
JSHandle<JSTaggedValue> res = DeserializeJSTaggedValue();
|
||||
return res;
|
||||
|
@ -37,6 +37,7 @@ bool ValueSerializer::CheckObjectCanSerialize(TaggedObject *object)
|
||||
case JSType::JS_URI_ERROR:
|
||||
case JSType::JS_SYNTAX_ERROR:
|
||||
case JSType::JS_OOM_ERROR:
|
||||
case JSType::JS_TERMINATION_ERROR:
|
||||
case JSType::JS_DATE:
|
||||
case JSType::JS_ARRAY:
|
||||
case JSType::JS_MAP:
|
||||
@ -94,8 +95,6 @@ bool ValueSerializer::WriteValue(JSThread *thread, const JSHandle<JSTaggedValue>
|
||||
vm_->GetSnapshotEnv()->Initialize();
|
||||
}
|
||||
SerializeJSTaggedValue(value.GetTaggedValue());
|
||||
// clear transfer obj set after serialization
|
||||
transferDataSet_.clear();
|
||||
if (value->IsHeapObject()) {
|
||||
vm_->GetSnapshotEnv()->ClearEnvMap();
|
||||
}
|
||||
@ -104,6 +103,12 @@ bool ValueSerializer::WriteValue(JSThread *thread, const JSHandle<JSTaggedValue>
|
||||
data_->SetIncompleteData(true);
|
||||
return false;
|
||||
}
|
||||
size_t maxSerializerSize = vm_->GetEcmaParamConfiguration().GetMaxJSSerializerSize();
|
||||
if (data_->Size() > maxSerializerSize) {
|
||||
LOG_ECMA(ERROR) << "The serialization data size has exceed limit Size, current size is: " << data_->Size()
|
||||
<< " max size is: " << maxSerializerSize;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,11 @@ namespace panda::ecmascript {
|
||||
class ValueSerializer : public BaseSerializer {
|
||||
public:
|
||||
explicit ValueSerializer(JSThread *thread) : BaseSerializer(thread) {}
|
||||
~ValueSerializer() override = default;
|
||||
~ValueSerializer()
|
||||
{
|
||||
// clear transfer obj set after serialization
|
||||
transferDataSet_.clear();
|
||||
}
|
||||
NO_COPY_SEMANTIC(ValueSerializer);
|
||||
NO_MOVE_SEMANTIC(ValueSerializer);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user