Skip to content

Commit c2765e2

Browse files
committed
- Fix possible memory leak in ffi module
1 parent 6e90f9a commit c2765e2

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

modules/std/ffi/ffi.cc

+7-7
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ static void _ffi_call(Value* result, ffi_call_func pf, size_t n_args,
132132
ffi_values[i] = vi;
133133
} else {
134134
clever_error("Argument %N isn't a int!\n", i + 1);
135-
return;
135+
goto out;
136136
}
137137
} else if (v->isBool()) {
138138
if (arg_type == FFIVOID or arg_type == FFIBOOL) {
@@ -145,7 +145,7 @@ static void _ffi_call(Value* result, ffi_call_func pf, size_t n_args,
145145
ffi_values[i] = b;
146146
} else {
147147
clever_error("Argument %N isn't a bool!\n", i + 1);
148-
return;
148+
goto out;
149149
}
150150
} else if (v->isStr()) {
151151
if (arg_type == FFIVOID or arg_type == FFISTRING) {
@@ -162,7 +162,7 @@ static void _ffi_call(Value* result, ffi_call_func pf, size_t n_args,
162162
ffi_values[i] = s;
163163
} else {
164164
clever_error("Argument %N isn't a string!\n", i + 1);
165-
return;
165+
goto out;
166166
}
167167
} else if (v->isDouble()) {
168168
if (arg_type == FFIVOID or arg_type == FFIDOUBLE) {
@@ -175,7 +175,7 @@ static void _ffi_call(Value* result, ffi_call_func pf, size_t n_args,
175175
ffi_values[i] = d;
176176
} else {
177177
clever_error("Argument %N isn't a double!\n", i + 1);
178-
return;
178+
goto out;
179179
}
180180
} else {
181181
if (arg_type == FFIVOID or arg_type == FFIPOINTER) {
@@ -186,14 +186,14 @@ static void _ffi_call(Value* result, ffi_call_func pf, size_t n_args,
186186
ffi_values[i] = &(obj->data);
187187
} else {
188188
clever_error("Argument %N isn't a pointer!\n", i + 1);
189-
return;
189+
goto out;
190190
}
191191
}
192192
}
193193

194194
if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, n_args, ffi_rt, ffi_args) != FFI_OK) {
195195
result->setBool(false);
196-
return;
196+
goto out;
197197
}
198198

199199
#ifndef CLEVER_WIN32
@@ -245,7 +245,7 @@ static void _ffi_call(Value* result, ffi_call_func pf, size_t n_args,
245245
result->setBool(true);
246246
}
247247
#endif
248-
248+
out:
249249
for (size_t i = 0; i < n_args; ++i) {
250250
Value* v = args.at(i + offset);
251251

0 commit comments

Comments
 (0)