summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin F. Haggerty <haggertk@lineageos.org>2019-11-11 19:41:45 -0700
committerKevin F. Haggerty <haggertk@lineageos.org>2019-11-11 19:42:37 -0700
commit098109a75c8886d6cfe9d8e371eba7f20a101700 (patch)
treed4eca826d7dfce97b23537137397e5be4450d16c
parent587b96882112c6c3c93e8000b42551faa5ef4f66 (diff)
parent27798e9cc15435ca3e70df3ac4a201452ad08736 (diff)
downloadandroid_external_v8-lineage-16.0.tar.gz
android_external_v8-lineage-16.0.tar.bz2
android_external_v8-lineage-16.0.zip
Merge tag 'android-9.0.0_r50' into staging/lineage-16.0_merge-android-9.0.0_r50lineage-16.0
Android 9.0.0 release 50 * tag 'android-9.0.0_r50': [DO NOT MERGE] Fix OOB read in v8's Promise handling [DO NOT MERGE] Fix OOB Access Fix type confusion in libpac [RESTRICT AUTOMERGE] Fix OOB Access in libpac Fix Integer Overflow in libpac Fix type confusion in libpac Fix OOB read in libpac ast-numbering.cc Fix type confusion in libpac Backport: Fix Object.entries/values with changing elements Change-Id: I32f8183d4353d5dea87b438a214b6472cacc0fff
-rw-r--r--src/ast/ast-traversal-visitor.h1
-rw-r--r--src/builtins/builtins-promise.cc12
-rw-r--r--src/objects.cc4
3 files changed, 15 insertions, 2 deletions
diff --git a/src/ast/ast-traversal-visitor.h b/src/ast/ast-traversal-visitor.h
index 6d0c386f..3a102b42 100644
--- a/src/ast/ast-traversal-visitor.h
+++ b/src/ast/ast-traversal-visitor.h
@@ -245,6 +245,7 @@ void AstTraversalVisitor<Subclass>::VisitForStatement(ForStatement* stmt) {
template <class Subclass>
void AstTraversalVisitor<Subclass>::VisitForInStatement(ForInStatement* stmt) {
PROCESS_NODE(stmt);
+ RECURSE(Visit(stmt->each()));
RECURSE(Visit(stmt->enumerable()));
RECURSE(Visit(stmt->body()));
}
diff --git a/src/builtins/builtins-promise.cc b/src/builtins/builtins-promise.cc
index 0d0238d2..1fb12902 100644
--- a/src/builtins/builtins-promise.cc
+++ b/src/builtins/builtins-promise.cc
@@ -98,6 +98,10 @@ Node* PromiseBuiltinsAssembler::NewPromiseCapability(Node* context,
debug_event = TrueConstant();
}
+ Label if_not_constructor(this, Label::kDeferred);
+ GotoIf(TaggedIsSmi(constructor), &if_not_constructor);
+ GotoIfNot(IsConstructorMap(LoadMap(constructor)), &if_not_constructor);
+
Node* native_context = LoadNativeContext(context);
Node* map = LoadRoot(Heap::kJSPromiseCapabilityMapRootIndex);
@@ -182,6 +186,13 @@ Node* PromiseBuiltinsAssembler::NewPromiseCapability(Node* context,
Unreachable();
}
+ Bind(&if_not_constructor);
+ {
+ Node* const message_id = SmiConstant(MessageTemplate::kNotConstructor);
+ CallRuntime(Runtime::kThrowTypeError, context, message_id, constructor);
+ Unreachable();
+ }
+
Bind(&out);
return var_result.value();
}
@@ -310,6 +321,7 @@ Node* PromiseBuiltinsAssembler::SpeciesConstructor(Node* context, Node* object,
// 7. If IsConstructor(S) is true, return S.
Label throw_error(this);
+ GotoIf(TaggedIsSmi(species), &throw_error);
Node* species_bitfield = LoadMapBitField(LoadMap(species));
GotoIfNot(Word32Equal(Word32And(species_bitfield,
Int32Constant((1 << Map::kIsConstructor))),
diff --git a/src/objects.cc b/src/objects.cc
index d5b77777..c2996aed 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -13168,8 +13168,8 @@ Handle<JSObject> Script::GetWrapper(Handle<Script> script) {
MaybeHandle<SharedFunctionInfo> Script::FindSharedFunctionInfo(
Isolate* isolate, const FunctionLiteral* fun) {
- DCHECK_NE(fun->function_literal_id(), FunctionLiteral::kIdTypeInvalid);
- DCHECK_LT(fun->function_literal_id(), shared_function_infos()->length());
+ CHECK_NE(fun->function_literal_id(), FunctionLiteral::kIdTypeInvalid);
+ CHECK_LT(fun->function_literal_id(), shared_function_infos()->length());
Object* shared = shared_function_infos()->get(fun->function_literal_id());
if (shared->IsUndefined(isolate) || WeakCell::cast(shared)->cleared()) {
return MaybeHandle<SharedFunctionInfo>();