Skip to content

Commit

Permalink
Merge branch 'server-1.15-branch' of git://people.freedesktop.org/~je…
Browse files Browse the repository at this point in the history
…remyhu/xserver into server-1.15-branch
  • Loading branch information
Matt Dew committed Mar 7, 2014
2 parents f41ab8c + 5e0432f commit b332cd2
Show file tree
Hide file tree
Showing 9 changed files with 56 additions and 25 deletions.
4 changes: 2 additions & 2 deletions hw/xquartz/GL/indirect.c
Expand Up @@ -643,10 +643,10 @@ __glFloorLog2(GLuint val)

static void *opengl_framework_handle;

static glx_gpa_proc
static glx_func_ptr
get_proc_address(const char *sym)
{
return (glx_gpa_proc) dlsym(opengl_framework_handle, sym);
return (glx_func_ptr) dlsym(opengl_framework_handle, sym);
}

static void
Expand Down
13 changes: 13 additions & 0 deletions hw/xquartz/X11Application.m
Expand Up @@ -70,6 +70,18 @@
static dispatch_queue_t eventTranslationQueue;
#endif

#ifndef __has_feature
#define __has_feature(x) 0
#endif

#ifndef CF_RETURNS_RETAINED
#if __has_feature(attribute_cf_returns_retained)
#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained))
#else
#define CF_RETURNS_RETAINED
#endif
#endif

extern Bool noTestExtensions;
extern Bool noRenderExtension;
extern BOOL serverRunning;
Expand Down Expand Up @@ -526,6 +538,7 @@ - (void) launch_client:(NSString *)cmd
CFRelease(b);
}

CF_RETURNS_RETAINED
static CFMutableArrayRef
nsarray_to_cfarray(NSArray *in)
{
Expand Down
2 changes: 1 addition & 1 deletion hw/xquartz/X11Controller.m
Expand Up @@ -934,7 +934,7 @@ - (NSApplicationTerminateReply) applicationShouldTerminate:sender
== NSAlertDefaultReturn) ? NSTerminateNow : NSTerminateCancel;
}

- (void) applicationWillTerminate:(NSNotification *)aNotification
- (void) applicationWillTerminate:(NSNotification *)aNotification _X_NORETURN
{
int remain;
[X11App prefs_synchronize];
Expand Down
16 changes: 16 additions & 0 deletions hw/xquartz/applewm.c
Expand Up @@ -378,6 +378,13 @@ ProcAppleWMSetWindowMenu(register ClientPtr client)
items = malloc(sizeof(char *) * nitems);
shortcuts = malloc(sizeof(char) * nitems);

if (!items || !shortcuts) {
free(items);
free(shortcuts);

return BadAlloc;
}

max_len = (stuff->length << 2) - sizeof(xAppleWMSetWindowMenuReq);
bytes = (char *)&stuff[1];

Expand All @@ -391,6 +398,15 @@ ProcAppleWMSetWindowMenu(register ClientPtr client)
break;
}
}

/* Check if we bailed out of the above loop due to a request that was too long */
if (j < nitems) {
free(items);
free(shortcuts);

return BadRequest;
}

X11ApplicationSetWindowMenu(nitems, items, shortcuts);
free(items);
free(shortcuts);
Expand Down
2 changes: 1 addition & 1 deletion hw/xquartz/darwinfb.h
Expand Up @@ -26,7 +26,7 @@
*/

#ifndef _DARWIN_FB_H
#define _DARWIN_DB_H
#define _DARWIN_FB_H

#include "scrnintstr.h"

Expand Down
4 changes: 4 additions & 0 deletions hw/xquartz/mach-startup/stub.c
Expand Up @@ -353,6 +353,10 @@ main(int argc, char **argv, char **envp)
newenvp = (string_array_t)calloc((1 + envpc), sizeof(string_t));

if (!newargv || !newenvp) {
/* Silence the clang static analyzer */
free(newargv);
free(newenvp);

asl_log(aslc, NULL, ASL_LEVEL_ERR,
"Xquartz: Memory allocation failure");
return EXIT_FAILURE;
Expand Down
3 changes: 3 additions & 0 deletions hw/xquartz/quartz.c
Expand Up @@ -109,11 +109,14 @@ Bool
QuartzAddScreen(int index,
ScreenPtr pScreen)
{
// The clang static analyzer thinks we leak displayInfo here
#ifndef __clang_analyzer__
// allocate space for private per screen Quartz specific storage
QuartzScreenPtr displayInfo = calloc(sizeof(QuartzScreenRec), 1);

// QUARTZ_PRIV(pScreen) = displayInfo;
dixSetPrivate(&pScreen->devPrivates, quartzScreenKey, displayInfo);
#endif /* __clang_analyzer__ */

// do Quartz mode specific initialization
return quartzProcs->AddScreen(index, pScreen);
Expand Down
10 changes: 10 additions & 0 deletions hw/xquartz/xpr/appledri.c
Expand Up @@ -123,6 +123,10 @@ ProcAppleDRIQueryDirectRenderingCapable(register ClientPtr client)
rep.length = 0;
rep.sequenceNumber = client->sequence;

if (stuff->screen >= screenInfo.numScreens) {
return BadValue;
}

if (!DRIQueryDirectRenderingCapable(screenInfo.screens[stuff->screen],
&isCapable)) {
return BadValue;
Expand Down Expand Up @@ -402,6 +406,7 @@ SProcAppleDRIQueryDirectRenderingCapable(register ClientPtr client)
{
REQUEST(xAppleDRIQueryDirectRenderingCapableReq);
swaps(&stuff->length);
REQUEST_SIZE_MATCH(xAppleDRIQueryDirectRenderingCapableReq);
swapl(&stuff->screen);
return ProcAppleDRIQueryDirectRenderingCapable(client);
}
Expand All @@ -411,6 +416,7 @@ SProcAppleDRIAuthConnection(register ClientPtr client)
{
REQUEST(xAppleDRIAuthConnectionReq);
swaps(&stuff->length);
REQUEST_SIZE_MATCH(xAppleDRIAuthConnectionReq);
swapl(&stuff->screen);
swapl(&stuff->magic);
return ProcAppleDRIAuthConnection(client);
Expand All @@ -421,6 +427,7 @@ SProcAppleDRICreateSurface(register ClientPtr client)
{
REQUEST(xAppleDRICreateSurfaceReq);
swaps(&stuff->length);
REQUEST_SIZE_MATCH(xAppleDRICreateSurfaceReq);
swapl(&stuff->screen);
swapl(&stuff->drawable);
swapl(&stuff->client_id);
Expand All @@ -432,6 +439,7 @@ SProcAppleDRIDestroySurface(register ClientPtr client)
{
REQUEST(xAppleDRIDestroySurfaceReq);
swaps(&stuff->length);
REQUEST_SIZE_MATCH(xAppleDRIDestroySurfaceReq);
swapl(&stuff->screen);
swapl(&stuff->drawable);
return ProcAppleDRIDestroySurface(client);
Expand All @@ -442,6 +450,7 @@ SProcAppleDRICreatePixmap(register ClientPtr client)
{
REQUEST(xAppleDRICreatePixmapReq);
swaps(&stuff->length);
REQUEST_SIZE_MATCH(xAppleDRICreatePixmapReq);
swapl(&stuff->screen);
swapl(&stuff->drawable);
return ProcAppleDRICreatePixmap(client);
Expand All @@ -452,6 +461,7 @@ SProcAppleDRIDestroyPixmap(register ClientPtr client)
{
REQUEST(xAppleDRIDestroyPixmapReq);
swaps(&stuff->length);
REQUEST_SIZE_MATCH(xAppleDRIDestroyPixmapReq);
swapl(&stuff->drawable);
return ProcAppleDRIDestroyPixmap(client);
}
Expand Down
27 changes: 6 additions & 21 deletions hw/xquartz/xpr/x-hook.c
Expand Up @@ -70,34 +70,19 @@ X_PFX(hook_remove) (x_list * lst, x_hook_function * fun, void *data) {

X_EXTERN void
X_PFX(hook_run) (x_list * lst, void *arg) {
x_list *node, *cell;
x_hook_function **fun;
void **data;
int length, i;
x_list *node;

if (!lst)
return;

length = X_PFX(list_length) (lst);
fun = malloc(sizeof(x_hook_function *) * length);
data = malloc(sizeof(void *) * length);

if (!fun || !data) {
FatalError("Failed to allocate memory in %s\n", __func__);
}
for (node = lst; node != NULL; node = node->next) {
x_list *cell = node->data;

for (i = 0, node = lst; node != NULL; node = node->next, i++) {
cell = node->data;
fun[i] = CELL_FUN(cell);
data[i] = CELL_DATA(cell);
}
x_hook_function *fun = CELL_FUN(cell);
void *data = CELL_DATA(cell);

for (i = 0; i < length; i++) {
(*fun[i])(arg, data[i]);
(*fun)(arg, data);
}

free(fun);
free(data);
}

X_EXTERN void
Expand Down

0 comments on commit b332cd2

Please sign in to comment.