summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'net-misc/nx/files/nx-2.1.0-nxagent-mem-leaks.patch')
-rw-r--r--net-misc/nx/files/nx-2.1.0-nxagent-mem-leaks.patch125
1 files changed, 125 insertions, 0 deletions
diff --git a/net-misc/nx/files/nx-2.1.0-nxagent-mem-leaks.patch b/net-misc/nx/files/nx-2.1.0-nxagent-mem-leaks.patch
new file mode 100644
index 000000000000..eb9d7cf317d6
--- /dev/null
+++ b/net-misc/nx/files/nx-2.1.0-nxagent-mem-leaks.patch
@@ -0,0 +1,125 @@
+diff -uBbr new/nx-X11/programs/Xserver/hw/nxagent/Atoms.c nx-X11/programs/Xserver/hw/nxagent/Atoms.c
+--- new/nx-X11/programs/Xserver/hw/nxagent/Atoms.c 2006-04-18 11:40:18.000000000 -0355
++++ nx-X11/programs/Xserver/hw/nxagent/Atoms.c 2007-02-19 12:54:51.000000000 -0455
+@@ -785,6 +785,8 @@
+
+ nxagentWriteAtom(local, remote, string, True);
+
++ XFree(string);
++
+ return local;
+ }
+
+diff -uBbr new/nx-X11/programs/Xserver/hw/nxagent/NXdixfonts.c nx-X11/programs/Xserver/hw/nxagent/NXdixfonts.c
+--- new/nx-X11/programs/Xserver/hw/nxagent/NXdixfonts.c 2006-11-09 12:22:35.000000000 -0455
++++ nx-X11/programs/Xserver/hw/nxagent/NXdixfonts.c 2007-02-21 13:23:59.000000000 -0455
+@@ -2521,7 +2521,7 @@
+ err = (*fpe_functions[fpe->type].start_list_fonts_and_aliases)
+ ((pointer) c->client, fpe, c->current.pattern,
+ c->current.patlen, c->current.max_names - c->names->nnames,
+- &c->current.private);
++ &c->current.private); /* FIXME: returned mem c->current.private (needed by list_next_font_or_alias) may never be freed */
+ if (err == Suspended) {
+ if (!c->slept) {
+ ClientSleep(client,
+diff -uBbr new/nx-X11/programs/Xserver/hw/nxagent/Pixmap.c nx-X11/programs/Xserver/hw/nxagent/Pixmap.c
+--- new/nx-X11/programs/Xserver/hw/nxagent/Pixmap.c 2006-11-09 12:18:00.000000000 -0455
++++ nx-X11/programs/Xserver/hw/nxagent/Pixmap.c 2007-02-21 13:28:54.000000000 -0455
+@@ -1115,6 +1115,7 @@
+ {
+ FatalError("XGetImage: Failed.\n");
+
++ free(data);
+ return False;
+ }
+
+@@ -1600,6 +1601,7 @@
+ fprintf(stderr, "nxagentSynchronizeDrawableData: WARNING! Failed to create the temporary GC.\n");
+ #endif
+
++ xfree(data);
+ return 0;
+ }
+
+@@ -1661,6 +1663,7 @@
+ fprintf(stderr, "nxagentSynchronizeDrawableData: WARNING! Failed to create the temporary GC.\n");
+ #endif
+
++ xfree(data);
+ return 0;
+ }
+
+@@ -1772,6 +1775,7 @@
+ int useExtents;
+ int imageLength, corruptedLength;
+ int corruptedWidth, corruptedHeight;
++ int ret = 0; /* Used by error handling. 0 is error(?, based on previous code) */
+
+ #ifdef TEST
+ static int totalLength;
+@@ -1812,7 +1816,7 @@
+ (void *) pDrawable);
+ #endif
+
+- return 0;
++ goto SR_FREE_CLIP;
+ }
+
+ /*
+@@ -1836,7 +1840,7 @@
+ (void *) pDrawable);
+ #endif
+
+- return 0;
++ goto SR_FREE_CLIP;
+ }
+ }
+
+@@ -1861,7 +1865,7 @@
+ fprintf(stderr, "nxagentSynchronizeRegion: WARNING! Failed to allocate memory for the operation.\n");
+ #endif
+
+- return 0;
++ goto SR_FREE_CLIP;
+ }
+
+ pSrcDrawable = (pDrawable -> type == DRAWABLE_PIXMAP ?
+@@ -1876,7 +1880,7 @@
+ fprintf(stderr, "nxagentSynchronizeRegion: WARNING! Failed to create the temporary GC.\n");
+ #endif
+
+- return 0;
++ goto SR_FREE_XALLOC;
+ }
+
+ ValidateGC(pDrawable, pGC);
+@@ -1935,7 +1939,7 @@
+
+ #endif
+
+- return 1;
++ goto SR_FREE_GC;
+ }
+
+ /*
+@@ -2029,13 +2033,17 @@
+
+ nxagentGCTrap = saveTrap;
+
+- nxagentFreeRegion(pDrawable, clipRegion);
++SR_FREE_GC:
++ ret = 1;
++ FreeScratchGC(pGC);
+
++SR_FREE_XALLOC:
+ xfree(data);
+
+- FreeScratchGC(pGC);
++SR_FREE_CLIP:
++ nxagentFreeRegion(pDrawable, clipRegion);
+
+- return 1;
++ return ret;
+ }
+
+ void nxagentSynchronizeBox(DrawablePtr pDrawable, BoxPtr pBox)