1
0
mirror of https://github.com/janet-lang/janet synced 2024-11-29 03:19:54 +00:00

Fix possible memory leak on buffer overflow.

(All buffer push functions can panic (longjmp), skipping
 deinit. Instead, we should use the garbage collected api).
This commit is contained in:
Calvin Rose 2019-01-19 12:31:55 -05:00
parent 4a6fcb5e23
commit bf8d5da3dc

View File

@ -98,43 +98,31 @@ static Janet janet_core_print(int32_t argc, Janet *argv) {
} }
static Janet janet_core_describe(int32_t argc, Janet *argv) { static Janet janet_core_describe(int32_t argc, Janet *argv) {
JanetBuffer b; JanetBuffer *b = janet_buffer(0);
janet_buffer_init(&b, 0);
for (int32_t i = 0; i < argc; ++i) for (int32_t i = 0; i < argc; ++i)
janet_description_b(&b, argv[i]); janet_description_b(b, argv[i]);
Janet ret = janet_stringv(b.data, b.count); return janet_stringv(b->data, b->count);
janet_buffer_deinit(&b);
return ret;
} }
static Janet janet_core_string(int32_t argc, Janet *argv) { static Janet janet_core_string(int32_t argc, Janet *argv) {
JanetBuffer b; JanetBuffer *b = janet_buffer(0);
janet_buffer_init(&b, 0);
for (int32_t i = 0; i < argc; ++i) for (int32_t i = 0; i < argc; ++i)
janet_to_string_b(&b, argv[i]); janet_to_string_b(b, argv[i]);
Janet ret = janet_stringv(b.data, b.count); return janet_stringv(b->data, b->count);
janet_buffer_deinit(&b);
return ret;
} }
static Janet janet_core_symbol(int32_t argc, Janet *argv) { static Janet janet_core_symbol(int32_t argc, Janet *argv) {
JanetBuffer b; JanetBuffer *b = janet_buffer(0);
janet_buffer_init(&b, 0);
for (int32_t i = 0; i < argc; ++i) for (int32_t i = 0; i < argc; ++i)
janet_to_string_b(&b, argv[i]); janet_to_string_b(b, argv[i]);
Janet ret = janet_symbolv(b.data, b.count); return janet_symbolv(b->data, b->count);
janet_buffer_deinit(&b);
return ret;
} }
static Janet janet_core_keyword(int32_t argc, Janet *argv) { static Janet janet_core_keyword(int32_t argc, Janet *argv) {
JanetBuffer b; JanetBuffer *b = janet_buffer(0);
janet_buffer_init(&b, 0);
for (int32_t i = 0; i < argc; ++i) for (int32_t i = 0; i < argc; ++i)
janet_to_string_b(&b, argv[i]); janet_to_string_b(b, argv[i]);
Janet ret = janet_keywordv(b.data, b.count); return janet_keywordv(b->data, b->count);
janet_buffer_deinit(&b);
return ret;
} }
static Janet janet_core_buffer(int32_t argc, Janet *argv) { static Janet janet_core_buffer(int32_t argc, Janet *argv) {