Skip to content

Commit ff449dc

Browse files
authored
Merge pull request #2252 from mgreter/bugfix/mem-leak-in-c-api
Fix memory leak in C-API functions
2 parents c32ce55 + b804830 commit ff449dc

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

src/sass_values.cpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ extern "C" {
275275

276276
union Sass_Value* ADDCALL sass_value_stringify (const union Sass_Value* v, bool compressed, int precision)
277277
{
278-
Value_Ptr val = sass_value_to_ast_node(v);
278+
Value_Obj val = sass_value_to_ast_node(v);
279279
Sass_Inspect_Options options(compressed ? COMPRESSED : NESTED, precision);
280280
std::string str(val->to_string(options));
281281
return sass_make_qstring(str.c_str());
@@ -288,44 +288,44 @@ extern "C" {
288288

289289
try {
290290

291-
Value_Ptr lhs = sass_value_to_ast_node(a);
292-
Value_Ptr rhs = sass_value_to_ast_node(b);
291+
Value_Obj lhs = sass_value_to_ast_node(a);
292+
Value_Obj rhs = sass_value_to_ast_node(b);
293293
struct Sass_Inspect_Options options(NESTED, 5);
294294

295295
// see if it's a relational expression
296296
switch(op) {
297-
case Sass_OP::EQ: return sass_make_boolean(Eval::eq(lhs, rhs));
298-
case Sass_OP::NEQ: return sass_make_boolean(!Eval::eq(lhs, rhs));
299-
case Sass_OP::GT: return sass_make_boolean(!Eval::lt(lhs, rhs, "gt") && !Eval::eq(lhs, rhs));
300-
case Sass_OP::GTE: return sass_make_boolean(!Eval::lt(lhs, rhs, "gte"));
301-
case Sass_OP::LT: return sass_make_boolean(Eval::lt(lhs, rhs, "lt"));
302-
case Sass_OP::LTE: return sass_make_boolean(Eval::lt(lhs, rhs, "lte") || Eval::eq(lhs, rhs));
297+
case Sass_OP::EQ: return sass_make_boolean(Eval::eq(&lhs, &rhs));
298+
case Sass_OP::NEQ: return sass_make_boolean(!Eval::eq(&lhs, &rhs));
299+
case Sass_OP::GT: return sass_make_boolean(!Eval::lt(&lhs, &rhs, "gt") && !Eval::eq(&lhs, &rhs));
300+
case Sass_OP::GTE: return sass_make_boolean(!Eval::lt(&lhs, &rhs, "gte"));
301+
case Sass_OP::LT: return sass_make_boolean(Eval::lt(&lhs, &rhs, "lt"));
302+
case Sass_OP::LTE: return sass_make_boolean(Eval::lt(&lhs, &rhs, "lte") || Eval::eq(&lhs, &rhs));
303303
default: break;
304304
}
305305

306306
if (sass_value_is_number(a) && sass_value_is_number(b)) {
307-
Number_Ptr_Const l_n = dynamic_cast<Number_Ptr_Const>(lhs);
308-
Number_Ptr_Const r_n = dynamic_cast<Number_Ptr_Const>(rhs);
307+
Number_Ptr_Const l_n = SASS_MEMORY_CAST(Number, lhs);
308+
Number_Ptr_Const r_n = SASS_MEMORY_CAST(Number, rhs);
309309
rv = Eval::op_numbers(op, *l_n, *r_n, options);
310310
}
311311
else if (sass_value_is_number(a) && sass_value_is_color(a)) {
312-
Number_Ptr_Const l_n = dynamic_cast<Number_Ptr_Const>(lhs);
313-
Color_Ptr_Const r_c = dynamic_cast<Color_Ptr_Const>(rhs);
312+
Number_Ptr_Const l_n = SASS_MEMORY_CAST(Number, lhs);
313+
Color_Ptr_Const r_c = SASS_MEMORY_CAST(Color, rhs);
314314
rv = Eval::op_number_color(op, *l_n, *r_c, options);
315315
}
316316
else if (sass_value_is_color(a) && sass_value_is_number(b)) {
317-
Color_Ptr_Const l_c = dynamic_cast<Color_Ptr_Const>(lhs);
318-
Number_Ptr_Const r_n = dynamic_cast<Number_Ptr_Const>(rhs);
317+
Color_Ptr_Const l_c = SASS_MEMORY_CAST(Color, lhs);
318+
Number_Ptr_Const r_n = SASS_MEMORY_CAST(Number, rhs);
319319
rv = Eval::op_color_number(op, *l_c, *r_n, options);
320320
}
321321
else if (sass_value_is_color(a) && sass_value_is_color(b)) {
322-
Color_Ptr_Const l_c = dynamic_cast<Color_Ptr_Const>(lhs);
323-
Color_Ptr_Const r_c = dynamic_cast<Color_Ptr_Const>(rhs);
322+
Color_Ptr_Const l_c = SASS_MEMORY_CAST(Color, lhs);
323+
Color_Ptr_Const r_c = SASS_MEMORY_CAST(Color, rhs);
324324
rv = Eval::op_colors(op, *l_c, *r_c, options);
325325
}
326326
else /* convert other stuff to string and apply operation */ {
327-
Value_Ptr l_v = dynamic_cast<Value_Ptr>(lhs);
328-
Value_Ptr r_v = dynamic_cast<Value_Ptr>(rhs);
327+
Value_Ptr l_v = SASS_MEMORY_CAST(Value, lhs);
328+
Value_Ptr r_v = SASS_MEMORY_CAST(Value, rhs);
329329
rv = Eval::op_strings(op, *l_v, *r_v, options);
330330
}
331331

0 commit comments

Comments
 (0)