Skip to content

Commit 98c86dc

Browse files
committed
fix crash on corrupted transition name
1 parent c9a988f commit 98c86dc

1 file changed

Lines changed: 14 additions & 6 deletions

File tree

obs-studio-server/source/callback-manager.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -172,18 +172,26 @@ void CallbackManager::addSource(obs_source_t *source)
172172
if (obs_source_get_type(source) == OBS_SOURCE_TYPE_TRANSITION) {
173173
std::unique_lock<std::mutex> ulock(transitions_mtx);
174174

175-
blog(LOG_INFO, "addSource - transition!: %s", obs_source_get_name(source));
175+
const char *raw_name = obs_source_get_name(source);
176+
if (!raw_name)
177+
return;
178+
179+
blog(LOG_INFO, "addSource - transition!: %s", raw_name);
176180

177-
TransitionInfo *ti = new TransitionInfo;
181+
auto ti = std::make_unique<TransitionInfo>();
178182
ti->transition = source;
179183

184+
auto result = transitions.try_emplace(std::string(raw_name), std::move(ti));
185+
if (!result.second) {
186+
blog(LOG_WARNING, "addSource - transition '%s' is already tracked; skipping", raw_name);
187+
return;
188+
}
189+
180190
signal_handler_t *sh = obs_source_get_signal_handler(source);
181191
if (sh) {
182-
signal_handler_connect(sh, "transition_start", transition_start_handler, ti);
183-
signal_handler_connect(sh, "transition_stop", transition_stop_handler, ti);
192+
signal_handler_connect(sh, "transition_start", transition_start_handler, result.first->second.get());
193+
signal_handler_connect(sh, "transition_stop", transition_stop_handler, result.first->second.get());
184194
}
185-
186-
transitions.emplace(std::make_pair(std::string(obs_source_get_name(source)), ti));
187195
} else {
188196
// Regular source
189197
std::unique_lock<std::mutex> ulock(sources_mtx);

0 commit comments

Comments
 (0)