Skip to content

Commit e06c663

Browse files
authored
Fix modelscan crash due to tag being NULL (#542)
* Fix modelscan crash due to tag being NULL * Fix SCRIPTSCAN and add test * Fix free string * Fix call
1 parent 740bbba commit e06c663

File tree

3 files changed

+11
-6
lines changed

3 files changed

+11
-6
lines changed

src/model.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ static void *RAI_Model_RdbLoad(struct RedisModuleIO *io, int encver) {
119119
model->infokey =
120120
RAI_AddStatsEntry(stats_ctx, stats_keystr, RAI_MODEL, backend, stats_devicestr, stats_tag);
121121

122-
RedisModule_Free(stats_keystr);
122+
RedisModule_FreeString(NULL, stats_keystr);
123123

124124
return model;
125125
}

src/redisai.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -471,8 +471,9 @@ int RedisAI_ModelGet_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv,
471471
RedisModule_ReplyWithCString(ctx, mto->devicestr);
472472

473473
RedisModule_ReplyWithCString(ctx, "tag");
474-
RedisModuleString *empty_tag = RedisModule_CreateString(ctx, "", 0);
474+
RedisModuleString *empty_tag = RedisModule_CreateString(NULL, "", 0);
475475
RedisModule_ReplyWithString(ctx, mto->tag ? mto->tag : empty_tag);
476+
RedisModule_FreeString(NULL, empty_tag);
476477

477478
RedisModule_ReplyWithCString(ctx, "batchsize");
478479
RedisModule_ReplyWithLongLong(ctx, (long)mto->opts.batchsize);
@@ -546,11 +547,13 @@ int RedisAI_ModelScan_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv
546547

547548
RedisModule_ReplyWithArray(ctx, nkeys);
548549

550+
RedisModuleString *empty_tag = RedisModule_CreateString(NULL, "", 0);
549551
for (long long i = 0; i < nkeys; i++) {
550552
RedisModule_ReplyWithArray(ctx, 2);
551553
RedisModule_ReplyWithString(ctx, keys[i]);
552-
RedisModule_ReplyWithString(ctx, tags[i]);
554+
RedisModule_ReplyWithString(ctx, tags[i] ? tags[i] : empty_tag);
553555
}
556+
RedisModule_FreeString(NULL, empty_tag);
554557

555558
RedisModule_Free(keys);
556559
RedisModule_Free(tags);
@@ -787,11 +790,13 @@ int RedisAI_ScriptScan_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **arg
787790

788791
RedisModule_ReplyWithArray(ctx, nkeys);
789792

793+
RedisModuleString *empty_tag = RedisModule_CreateString(NULL, "", 0);
790794
for (long long i = 0; i < nkeys; i++) {
791795
RedisModule_ReplyWithArray(ctx, 2);
792796
RedisModule_ReplyWithString(ctx, keys[i]);
793-
RedisModule_ReplyWithString(ctx, tags[i]);
797+
RedisModule_ReplyWithString(ctx, tags[i] ? tags[i] : empty_tag);
794798
}
799+
RedisModule_FreeString(NULL, empty_tag);
795800

796801
RedisModule_Free(keys);
797802
RedisModule_Free(tags);

tests/flow/tests_pytorch.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -859,7 +859,7 @@ def test_pytorch_modelscan_scriptscan(env):
859859
ret = con.execute_command('AI.MODELSET', 'm1', 'TORCH', DEVICE, 'TAG', 'm:v1', 'BLOB', model_pb)
860860
env.assertEqual(ret, b'OK')
861861

862-
ret = con.execute_command('AI.MODELSET', 'm2', 'TORCH', DEVICE, 'TAG', 'm:v1', 'BLOB', model_pb)
862+
ret = con.execute_command('AI.MODELSET', 'm2', 'TORCH', DEVICE, 'BLOB', model_pb)
863863
env.assertEqual(ret, b'OK')
864864

865865
script_filename = os.path.join(test_data_path, 'script.txt')
@@ -870,7 +870,7 @@ def test_pytorch_modelscan_scriptscan(env):
870870
ret = con.execute_command('AI.SCRIPTSET', 's1', DEVICE, 'TAG', 's:v1', 'SOURCE', script)
871871
env.assertEqual(ret, b'OK')
872872

873-
ret = con.execute_command('AI.SCRIPTSET', 's2', DEVICE, 'TAG', 's:v1', 'SOURCE', script)
873+
ret = con.execute_command('AI.SCRIPTSET', 's2', DEVICE, 'SOURCE', script)
874874
env.assertEqual(ret, b'OK')
875875

876876
ensureSlaveSynced(con, env)

0 commit comments

Comments
 (0)