Skip to content

Commit e0c78f4

Browse files
authored
xpilot-ng, bloodspilot-client, boodspilot-server: fix (NixOS#392353)
2 parents 395137a + 09972fb commit e0c78f4

File tree

6 files changed

+240
-1
lines changed

6 files changed

+240
-1
lines changed

pkgs/games/xpilot/bloodspilot-client.nix

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ stdenv.mkDerivation rec {
2121
sha256 = "1qwl95av5an2zl01m7saj6fyy49xpixga7gbn4lwbpgpqs1rbwxj";
2222
};
2323

24+
patches = [ ./bloodspilot-sdl-window-fix.patch ];
25+
2426
buildInputs = [
2527
libX11
2628
SDL
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
--- a/src/client/sdl/scrap.c 2012-09-02 11:25:23.000000000 +0200
2+
+++ b/src/client/sdl/scrap.c 2025-03-23 12:01:51.968751308 +0100
3+
@@ -71,13 +71,13 @@
4+
#if defined(X11_SCRAP)
5+
/* * */
6+
static Display *SDL_Display;
7+
-static Window SDL_Window;
8+
+static Window BloodsPilot_SDL_Window;
9+
static void (*Lock_Display) (void);
10+
static void (*Unlock_Display) (void);
11+
12+
#elif defined(WIN_SCRAP)
13+
/* * */
14+
-static HWND SDL_Window;
15+
+static HWND BloodsPilot_SDL_Window;
16+
17+
#elif defined(QNX_SCRAP)
18+
/* * */
19+
@@ -274,7 +274,7 @@
20+
/* * */
21+
if (info.subsystem == SDL_SYSWM_X11) {
22+
SDL_Display = info.info.x11.display;
23+
- SDL_Window = info.info.x11.window;
24+
+ BloodsPilot_SDL_Window = info.info.x11.window;
25+
Lock_Display = info.info.x11.lock_func;
26+
Unlock_Display = info.info.x11.unlock_func;
27+
28+
@@ -290,7 +290,7 @@
29+
30+
#elif defined(WIN_SCRAP)
31+
/* * */
32+
- SDL_Window = info.window;
33+
+ BloodsPilot_SDL_Window = info.window;
34+
retval = 0;
35+
36+
#elif defined(QNX_SCRAP)
37+
@@ -310,12 +310,12 @@
38+
#if defined(X11_SCRAP)
39+
/* * */
40+
Lock_Display();
41+
- retval = (XGetSelectionOwner(SDL_Display, XA_PRIMARY) != SDL_Window);
42+
+ retval = (XGetSelectionOwner(SDL_Display, XA_PRIMARY) != BloodsPilot_SDL_Window);
43+
Unlock_Display();
44+
45+
#elif defined(WIN_SCRAP)
46+
/* * */
47+
- retval = (GetClipboardOwner() != SDL_Window);
48+
+ retval = (GetClipboardOwner() != BloodsPilot_SDL_Window);
49+
50+
#elif defined(QNX_SCRAP)
51+
/* * */
52+
@@ -346,14 +346,14 @@
53+
(unsigned char *) dst, dstlen);
54+
free(dst);
55+
if (lost_scrap())
56+
- XSetSelectionOwner(SDL_Display, XA_PRIMARY, SDL_Window,
57+
+ XSetSelectionOwner(SDL_Display, XA_PRIMARY, BloodsPilot_SDL_Window,
58+
CurrentTime);
59+
Unlock_Display();
60+
}
61+
62+
#elif defined(WIN_SCRAP)
63+
/* * */
64+
- if (OpenClipboard(SDL_Window)) {
65+
+ if (OpenClipboard(BloodsPilot_SDL_Window)) {
66+
HANDLE hMem;
67+
68+
hMem = GlobalAlloc((GMEM_MOVEABLE | GMEM_DDESHARE), dstlen);
69+
@@ -441,7 +441,7 @@
70+
Lock_Display();
71+
owner = XGetSelectionOwner(SDL_Display, XA_PRIMARY);
72+
Unlock_Display();
73+
- if ((owner == None) || (owner == SDL_Window)) {
74+
+ if ((owner == None) || (owner == BloodsPilot_SDL_Window)) {
75+
owner = DefaultRootWindow(SDL_Display);
76+
selection1 = XA_CUT_BUFFER0;
77+
}
78+
@@ -449,7 +449,7 @@
79+
int selection_response = 0;
80+
SDL_Event event;
81+
82+
- owner = SDL_Window;
83+
+ owner = BloodsPilot_SDL_Window;
84+
Lock_Display();
85+
selection1 = XInternAtom(SDL_Display, "SDL_SELECTION", False);
86+
XConvertSelection(SDL_Display, XA_PRIMARY, format,
87+
@@ -485,7 +485,7 @@
88+
89+
#elif defined(WIN_SCRAP)
90+
/* * */
91+
- if (IsClipboardFormatAvailable(format) && OpenClipboard(SDL_Window)) {
92+
+ if (IsClipboardFormatAvailable(format) && OpenClipboard(BloodsPilot_SDL_Window)) {
93+
HANDLE hMem;
94+
char *src;
95+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
Fortify catches a possible strcpy overcopy, throw more space at it
2+
3+
--- a/src/server/contact.c 2010-05-24 14:51:41.000000000 +0200
4+
+++ b/src/server/contact.c 2025-03-23 12:15:36.426805646 +0100
5+
@@ -58,11 +58,11 @@
6+
7+
struct queued_player {
8+
struct queued_player *next;
9+
- char real_name[MAX_CHARS];
10+
- char nick_name[MAX_CHARS];
11+
- char disp_name[MAX_CHARS];
12+
- char host_name[MAX_CHARS];
13+
- char host_addr[24];
14+
+ char real_name[MAX_CHARS + 32];
15+
+ char nick_name[MAX_CHARS + 32];
16+
+ char disp_name[MAX_CHARS + 32];
17+
+ char host_name[MAX_CHARS + 32];
18+
+ char host_addr[1056];
19+
int32_t port;
20+
team_t *team;
21+
uint32_t version;
22+
@@ -271,12 +271,12 @@
23+
uint32_t my_magic;
24+
uint16_t port;
25+
char ch;
26+
- char real_name[MAX_CHARS];
27+
- char disp_name[MAX_CHARS];
28+
- char nick_name[MAX_CHARS];
29+
- char host_name[MAX_CHARS];
30+
- char host_addr[24];
31+
- char str[MSG_LEN];
32+
+ char real_name[MAX_CHARS + 32 ];
33+
+ char disp_name[MAX_CHARS + 32 ];
34+
+ char nick_name[MAX_CHARS + 32 ];
35+
+ char host_name[MAX_CHARS + 32 ];
36+
+ char host_addr[1056];
37+
+ char str[MSG_LEN + 32];
38+
39+
/*
40+
* Someone connected to us, now try and decipher the message :)

pkgs/games/xpilot/bloodspilot-server.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
2020

2121
patches = [
2222
./server-gcc5.patch
23+
./bloodspilot-server-strcpy-fix.patch
2324
];
2425

2526
meta = with lib; {

pkgs/games/xpilot/default.nix

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
fetchurl,
55
libX11,
66
libSM,
7+
libXext,
78
SDL,
89
libGLU,
910
libGL,
@@ -23,6 +24,7 @@ stdenv.mkDerivation rec {
2324
buildInputs = [
2425
libX11
2526
libSM
27+
libXext
2628
SDL
2729
SDL_ttf
2830
SDL_image
@@ -33,7 +35,10 @@ stdenv.mkDerivation rec {
3335
libXxf86misc
3436
];
3537

36-
patches = [ ./xpilot-ng-gcc-14-fix.patch ];
38+
patches = [
39+
./xpilot-ng-gcc-14-fix.patch
40+
./xpilot-ng-sdl-window-fix.patch
41+
];
3742

3843
meta = with lib; {
3944
description = "Multiplayer X11 space combat game";
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
XPilot-NG uses SDL_Window (now an SDL type name) as a variable name
2+
3+
--- a/src/client/sdl/scrap.c 2025-03-23 11:48:45.045699445 +0100
4+
+++ b.src/client/sdl/scrap.c 2025-03-23 11:48:48.773699690 +0100
5+
@@ -57,13 +57,13 @@
6+
#if defined(X11_SCRAP)
7+
/* * */
8+
static Display *SDL_Display;
9+
-static Window SDL_Window;
10+
+static Window XPilot_SDL_Window;
11+
static void (*Lock_Display)(void);
12+
static void (*Unlock_Display)(void);
13+
14+
#elif defined(WIN_SCRAP)
15+
/* * */
16+
-static HWND SDL_Window;
17+
+static HWND XPilot_SDL_Window;
18+
19+
#elif defined(QNX_SCRAP)
20+
/* * */
21+
@@ -285,7 +285,7 @@
22+
if ( info.subsystem == SDL_SYSWM_X11 )
23+
{
24+
SDL_Display = info.info.x11.display;
25+
- SDL_Window = info.info.x11.window;
26+
+ XPilot_SDL_Window = info.info.x11.window;
27+
Lock_Display = info.info.x11.lock_func;
28+
Unlock_Display = info.info.x11.unlock_func;
29+
30+
@@ -302,7 +302,7 @@
31+
32+
#elif defined(WIN_SCRAP)
33+
/* * */
34+
- SDL_Window = info.window;
35+
+ XPilot_SDL_Window = info.window;
36+
retval = 0;
37+
38+
#elif defined(QNX_SCRAP)
39+
@@ -323,12 +323,12 @@
40+
#if defined(X11_SCRAP)
41+
/* * */
42+
Lock_Display();
43+
- retval = ( XGetSelectionOwner(SDL_Display, XA_PRIMARY) != SDL_Window );
44+
+ retval = ( XGetSelectionOwner(SDL_Display, XA_PRIMARY) != XPilot_SDL_Window );
45+
Unlock_Display();
46+
47+
#elif defined(WIN_SCRAP)
48+
/* * */
49+
- retval = ( GetClipboardOwner() != SDL_Window );
50+
+ retval = ( GetClipboardOwner() != XPilot_SDL_Window );
51+
52+
#elif defined(QNX_SCRAP)
53+
/* * */
54+
@@ -360,13 +360,13 @@
55+
XA_CUT_BUFFER0, format, 8, PropModeReplace, (unsigned char *)dst, dstlen);
56+
free(dst);
57+
if ( lost_scrap() )
58+
- XSetSelectionOwner(SDL_Display, XA_PRIMARY, SDL_Window, CurrentTime);
59+
+ XSetSelectionOwner(SDL_Display, XA_PRIMARY, XPilot_SDL_Window, CurrentTime);
60+
Unlock_Display();
61+
}
62+
63+
#elif defined(WIN_SCRAP)
64+
/* * */
65+
- if ( OpenClipboard(SDL_Window) )
66+
+ if ( OpenClipboard(XPilot_SDL_Window) )
67+
{
68+
HANDLE hMem;
69+
70+
@@ -461,7 +461,7 @@
71+
Lock_Display();
72+
owner = XGetSelectionOwner(SDL_Display, XA_PRIMARY);
73+
Unlock_Display();
74+
- if ( (owner == None) || (owner == SDL_Window) )
75+
+ if ( (owner == None) || (owner == XPilot_SDL_Window) )
76+
{
77+
owner = DefaultRootWindow(SDL_Display);
78+
selection1 = XA_CUT_BUFFER0;
79+
@@ -471,7 +471,7 @@
80+
int selection_response = 0;
81+
SDL_Event event;
82+
83+
- owner = SDL_Window;
84+
+ owner = XPilot_SDL_Window;
85+
Lock_Display();
86+
selection1 = XInternAtom(SDL_Display, "SDL_SELECTION", False);
87+
XConvertSelection(SDL_Display, XA_PRIMARY, format,
88+
@@ -511,7 +511,7 @@
89+
90+
#elif defined(WIN_SCRAP)
91+
/* * */
92+
- if ( IsClipboardFormatAvailable(format) && OpenClipboard(SDL_Window) )
93+
+ if ( IsClipboardFormatAvailable(format) && OpenClipboard(XPilot_SDL_Window) )
94+
{
95+
HANDLE hMem;
96+
char *src;

0 commit comments

Comments
 (0)