Skip to content

Commit 0dea5f2

Browse files
authored
Merge pull request #2437 from mgreter/bugfix/segfaults
Fix a few segfaults
2 parents 0787ad0 + 39bda45 commit 0dea5f2

File tree

4 files changed

+15
-11
lines changed

4 files changed

+15
-11
lines changed

src/ast.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1225,7 +1225,7 @@ namespace Sass {
12251225
} else {
12261226
last()->head_->concat(h);
12271227
}
1228-
} else {
1228+
} else if (last()->head_) {
12291229
last()->head_->concat(h);
12301230
}
12311231
} else {

src/bind.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,9 @@ namespace Sass {
218218
Map_Obj argmap = Cast<Map>(a->value());
219219

220220
for (auto key : argmap->keys()) {
221-
std::string param = "$" + unquote(Cast<String_Constant>(key)->value());
221+
String_Constant_Ptr val = Cast<String_Constant>(key);
222+
if (val == NULL) throw Exception::InvalidVarKwdType(key->pstate(), key->inspect(), a);
223+
std::string param = "$" + unquote(val->value());
222224

223225
if (!param_map.count(param)) {
224226
std::stringstream msg;

src/extend.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -718,7 +718,7 @@ namespace Sass {
718718
}
719719

720720
Node chunk2 = Node::createCollection();
721-
while (!chunker(seq2)) {
721+
while (!seq2.collection()->empty() && !chunker(seq2)) {
722722
chunk2.collection()->push_back(seq2.collection()->front());
723723
seq2.collection()->pop_front();
724724
}
@@ -1953,12 +1953,14 @@ namespace Sass {
19531953
Wrapped_Selector_Ptr ext_ws = Cast<Wrapped_Selector>(ext_head->first());
19541954
if (ext_ws/* && ext_cs->length() == 1*/) {
19551955
Selector_List_Obj ws_cs = Cast<Selector_List>(ext_ws->selector());
1956-
Compound_Selector_Obj ws_ss = ws_cs->first()->head();
1957-
if (!(
1958-
Cast<Pseudo_Selector>(ws_ss->first()) ||
1959-
Cast<Element_Selector>(ws_ss->first()) ||
1960-
Cast<Placeholder_Selector>(ws_ss->first())
1961-
)) continue;
1956+
if (ws_cs && !ws_cs->empty() && ws_cs->first()) {
1957+
Compound_Selector_Obj ws_ss = ws_cs->first()->head();
1958+
if (ws_ss && !ws_ss->empty() && !(
1959+
Cast<Pseudo_Selector>(ws_ss->first()) ||
1960+
Cast<Element_Selector>(ws_ss->first()) ||
1961+
Cast<Placeholder_Selector>(ws_ss->first())
1962+
)) continue;
1963+
}
19621964
}
19631965
cpy_ws_sl->append(ext_cs->first());
19641966
}

src/functions.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,10 +1829,10 @@ namespace Sass {
18291829
Expand expand(ctx, &d_env, backtrace, &selector_stack);
18301830
Expression_Obj cond = ARG("$condition", Expression)->perform(&expand.eval);
18311831
bool is_true = !cond->is_false();
1832-
Expression_Ptr res = ARG(is_true ? "$if-true" : "$if-false", Expression);
1832+
Expression_Obj res = ARG(is_true ? "$if-true" : "$if-false", Expression);
18331833
res = res->perform(&expand.eval);
18341834
res->set_delayed(false); // clone?
1835-
return res;
1835+
return res.detach();
18361836
}
18371837

18381838
//////////////////////////

0 commit comments

Comments
 (0)