annotate test/testnative.h @ 4511:ae7799d16c87

Daniel Wyatt 2010-03-26 14:52:53 PDT If a non-console Windows SDL program has a non-quoted 0th argument followed optionally by more non-quoted arguments and then by an empty quoted argument, it will crash (attempts to dereference a NULL pointer). In other words, something like this: test.exe [non-quoted args] "" [...] The fix is a one-liner in ParseCommandLine() of src/main/win32/SDL_win32_main.c. You can test this with any non-console SDL program on windows like this: 1) Open a console (cmd.exe) 2) Launch the program in one of the following ways: program "" program arg1 "" program arg1 "" arg3 These will not cause a crash: "program" [...] program "arg1" "" When a Windows program is launched from Explorer, its 0th argument seems to always be quoted, so it won't be a problem in that case. I've tested this on Windows XP SP3 and Windows 7.
author Sam Lantinga <slouken@libsdl.org>
date Mon, 12 Jul 2010 22:08:50 -0700
parents 94dd49f6b005
children e8916fe9cfc8
rev   line source
3059
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
2 /* Definitions for platform dependent windowing functions to test SDL
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
3 integration with native windows
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
4 */
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
5
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
6 #include "SDL.h"
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
7
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
8 /* This header includes all the necessary system headers for native windows */
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
9 #include "SDL_syswm.h"
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
10
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
11 typedef struct
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
12 {
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
13 const char *tag;
3061
94dd49f6b005 More of the same
Sam Lantinga <slouken@libsdl.org>
parents: 3059
diff changeset
14 void *(*CreateNativeWindow) (int w, int h);
94dd49f6b005 More of the same
Sam Lantinga <slouken@libsdl.org>
parents: 3059
diff changeset
15 void (*DestroyNativeWindow) (void *window);
3059
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
16 } NativeWindowFactory;
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
17
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
18 #ifdef SDL_VIDEO_DRIVER_WIN32
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
19 #define TEST_NATIVE_WIN32
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
20 extern NativeWindowFactory Win32WindowFactory;
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
21 #endif
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
22
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
23 #ifdef SDL_VIDEO_DRIVER_X11
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
24 #define TEST_NATIVE_X11
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
25 extern NativeWindowFactory X11WindowFactory;
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
26 #endif
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
27
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
28 #ifdef SDL_VIDEO_DRIVER_COCOA
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
29 /* Actually, we don't really do this, since it involves adding Objective C
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
30 support to the build system, which is a little tricky. You can uncomment
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
31 it manually though and link testnativecocoa.m into the test application.
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
32 */
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
33 #if 1
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
34 #define TEST_NATIVE_COCOA
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
35 extern NativeWindowFactory CocoaWindowFactory;
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
36 #endif
79b061c4f316 Whoops, missed a file
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
37 #endif