Skip to content

Commit bb4807a

Browse files
committed
Prevent dangling pointers
1 parent 9386f23 commit bb4807a

3 files changed

Lines changed: 18 additions & 3 deletions

File tree

bindings/ruby/ext/ruby_whisper.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define RUBY_WHISPER_H
33

44
#include <ruby.h>
5+
#include <ruby/util.h>
56
#include <ruby/memory_view.h>
67
#include "whisper.h"
78

bindings/ruby/ext/ruby_whisper_params.c

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,15 @@ rb_whisper_params_mark(void *p)
240240
void
241241
ruby_whisper_params_free(ruby_whisper_params *rwp)
242242
{
243+
if (rwp->params.language) {
244+
ruby_xfree((void *)rwp->params.language);
245+
}
246+
if (rwp->params.initial_prompt) {
247+
ruby_xfree((void *)rwp->params.initial_prompt);
248+
}
249+
if (rwp->params.vad_model_path) {
250+
ruby_xfree((void *)rwp->params.vad_model_path);
251+
}
243252
}
244253

245254
void
@@ -276,6 +285,9 @@ ruby_whisper_params_allocate(VALUE klass)
276285
ruby_whisper_params *rwp;
277286
VALUE obj = TypedData_Make_Struct(klass, ruby_whisper_params, &ruby_whisper_params_type, rwp);
278287
rwp->params = whisper_full_default_params(WHISPER_SAMPLING_GREEDY);
288+
rwp->params.language = NULL;
289+
rwp->params.initial_prompt = NULL;
290+
rwp->params.vad_model_path = NULL;
279291
rwp->diarize = false;
280292
rwp->vad_params = TypedData_Wrap_Struct(cVADParams, &ruby_whisper_vad_params_type, (void *)&rwp->params.vad_params);
281293
rwp->new_segment_callback_container = rb_whisper_callback_container_allocate();
@@ -299,7 +311,7 @@ ruby_whisper_params_set_language(VALUE self, VALUE value)
299311
if (value == Qfalse || value == Qnil) {
300312
rwp->params.language = "auto";
301313
} else {
302-
rwp->params.language = StringValueCStr(value);
314+
rwp->params.language = ruby_strdup(StringValueCStr(value));
303315
}
304316
return value;
305317
}
@@ -608,7 +620,7 @@ ruby_whisper_params_set_initial_prompt(VALUE self, VALUE value)
608620
{
609621
ruby_whisper_params *rwp;
610622
TypedData_Get_Struct(self, ruby_whisper_params, &ruby_whisper_params_type, rwp);
611-
rwp->params.initial_prompt = StringValueCStr(value);
623+
rwp->params.initial_prompt = ruby_strdup(StringValueCStr(value));
612624
return value;
613625
}
614626
/*
@@ -1108,7 +1120,7 @@ ruby_whisper_params_set_vad_model_path(VALUE self, VALUE value)
11081120
return value;
11091121
}
11101122
VALUE path = ruby_whisper_normalize_model_path(value);
1111-
rwp->params.vad_model_path = StringValueCStr(path);
1123+
rwp->params.vad_model_path = ruby_strdup(StringValueCStr(path));
11121124
return value;
11131125
}
11141126

bindings/ruby/test/test_params.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ def setup
4646
def test_language
4747
@params.language = "en"
4848
assert_equal @params.language, "en"
49+
GC.compact
50+
assert_equal @params.language, "en"
4951
@params.language = "auto"
5052
assert_equal @params.language, "auto"
5153
end

0 commit comments

Comments
 (0)