Skip to content

Commit 43c2422

Browse files
committed
Add error handling to property setting
1 parent d819106 commit 43c2422

File tree

2 files changed

+55
-17
lines changed

2 files changed

+55
-17
lines changed

src/thread/SDL_thread.c

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -405,9 +405,20 @@ SDL_Thread *SDL_CreateThreadRuntime(SDL_ThreadFunction fn,
405405
SDL_FunctionPointer pfnEndThread)
406406
{
407407
const SDL_PropertiesID props = SDL_CreateProperties();
408-
SDL_SetPointerProperty(props, SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER, (void *) fn);
409-
SDL_SetStringProperty(props, SDL_PROP_THREAD_CREATE_NAME_STRING, name);
410-
SDL_SetPointerProperty(props, SDL_PROP_THREAD_CREATE_USERDATA_POINTER, userdata);
408+
if (!props) {
409+
SDL_OutOfMemory();
410+
return NULL;
411+
}
412+
413+
bool ok = SDL_SetPointerProperty(props, SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER, (void *) fn);
414+
ok &= SDL_SetStringProperty(props, SDL_PROP_THREAD_CREATE_NAME_STRING, name);
415+
ok &= SDL_SetPointerProperty(props, SDL_PROP_THREAD_CREATE_USERDATA_POINTER, userdata);
416+
if (!ok) {
417+
SDL_DestroyProperties(props);
418+
SDL_OutOfMemory();
419+
return NULL;
420+
}
421+
411422
SDL_Thread *thread = SDL_CreateThreadWithPropertiesRuntime(props, pfnBeginThread, pfnEndThread);
412423
SDL_DestroyProperties(props);
413424
return thread;
@@ -417,10 +428,19 @@ SDL_Thread *SDL_CreateThreadRuntime(SDL_ThreadFunction fn,
417428
SDL_Thread *SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, size_t stacksize, void *userdata)
418429
{
419430
const SDL_PropertiesID props = SDL_CreateProperties();
420-
SDL_SetPointerProperty(props, SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER, (void *) fn);
421-
SDL_SetStringProperty(props, SDL_PROP_THREAD_CREATE_NAME_STRING, name);
422-
SDL_SetPointerProperty(props, SDL_PROP_THREAD_CREATE_USERDATA_POINTER, userdata);
423-
SDL_SetNumberProperty(props, SDL_PROP_THREAD_CREATE_STACKSIZE_NUMBER, (Sint64) stacksize);
431+
if (!props) {
432+
return NULL;
433+
}
434+
435+
bool ok = SDL_SetPointerProperty(props, SDL_PROP_THREAD_CREATE_ENTRY_FUNCTION_POINTER, (void *) fn);
436+
ok &= SDL_SetStringProperty(props, SDL_PROP_THREAD_CREATE_NAME_STRING, name);
437+
ok &= SDL_SetPointerProperty(props, SDL_PROP_THREAD_CREATE_USERDATA_POINTER, userdata);
438+
ok &= SDL_SetNumberProperty(props, SDL_PROP_THREAD_CREATE_STACKSIZE_NUMBER, (Sint64) stacksize);
439+
if (!ok) {
440+
SDL_DestroyProperties(props);
441+
return NULL;
442+
}
443+
424444
SDL_Thread *thread = SDL_CreateThreadWithProperties(props);
425445
SDL_DestroyProperties(props);
426446
return thread;

src/video/SDL_video.c

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2603,12 +2603,21 @@ SDL_Window *SDL_CreateWindow(const char *title, int w, int h, SDL_WindowFlags fl
26032603
{
26042604
SDL_Window *window;
26052605
SDL_PropertiesID props = SDL_CreateProperties();
2606+
if (!props) {
2607+
SDL_OutOfMemory();
2608+
return NULL;
2609+
}
2610+
bool ok = true;
26062611
if (title && *title) {
2607-
SDL_SetStringProperty(props, SDL_PROP_WINDOW_CREATE_TITLE_STRING, title);
2612+
ok &= SDL_SetStringProperty(props, SDL_PROP_WINDOW_CREATE_TITLE_STRING, title);
2613+
}
2614+
ok &= SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_WIDTH_NUMBER, w);
2615+
ok &= SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_HEIGHT_NUMBER, h);
2616+
ok &= SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_FLAGS_NUMBER, flags);
2617+
if (!ok) {
2618+
SDL_OutOfMemory();
2619+
return NULL;
26082620
}
2609-
SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_WIDTH_NUMBER, w);
2610-
SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_HEIGHT_NUMBER, h);
2611-
SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_FLAGS_NUMBER, flags);
26122621
window = SDL_CreateWindowWithProperties(props);
26132622
SDL_DestroyProperties(props);
26142623
return window;
@@ -2618,19 +2627,28 @@ SDL_Window *SDL_CreatePopupWindow(SDL_Window *parent, int offset_x, int offset_y
26182627
{
26192628
SDL_Window *window;
26202629
SDL_PropertiesID props = SDL_CreateProperties();
2630+
if (!props) {
2631+
SDL_OutOfMemory();
2632+
return NULL;
2633+
}
26212634

26222635
// Popups must specify either the tooltip or popup menu window flags
26232636
if (!(flags & (SDL_WINDOW_TOOLTIP | SDL_WINDOW_POPUP_MENU))) {
26242637
SDL_SetError("Popup windows must specify either the 'SDL_WINDOW_TOOLTIP' or the 'SDL_WINDOW_POPUP_MENU' flag");
26252638
return NULL;
26262639
}
26272640

2628-
SDL_SetPointerProperty(props, SDL_PROP_WINDOW_CREATE_PARENT_POINTER, parent);
2629-
SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_X_NUMBER, offset_x);
2630-
SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_Y_NUMBER, offset_y);
2631-
SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_WIDTH_NUMBER, w);
2632-
SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_HEIGHT_NUMBER, h);
2633-
SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_FLAGS_NUMBER, flags);
2641+
bool ok = SDL_SetPointerProperty(props, SDL_PROP_WINDOW_CREATE_PARENT_POINTER, parent);
2642+
ok &= SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_X_NUMBER, offset_x);
2643+
ok &= SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_Y_NUMBER, offset_y);
2644+
ok &= SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_WIDTH_NUMBER, w);
2645+
ok &= SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_HEIGHT_NUMBER, h);
2646+
ok &= SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_FLAGS_NUMBER, flags);
2647+
if (!ok) {
2648+
SDL_DestroyProperties(props);
2649+
SDL_OutOfMemory();
2650+
return NULL;
2651+
}
26342652
window = SDL_CreateWindowWithProperties(props);
26352653
SDL_DestroyProperties(props);
26362654
return window;

0 commit comments

Comments
 (0)