aboutsummaryrefslogtreecommitdiff
path: root/security/pinentry/files/patch-gtk2-gmem
diff options
context:
space:
mode:
Diffstat (limited to 'security/pinentry/files/patch-gtk2-gmem')
-rw-r--r--security/pinentry/files/patch-gtk2-gmem145
1 files changed, 145 insertions, 0 deletions
diff --git a/security/pinentry/files/patch-gtk2-gmem b/security/pinentry/files/patch-gtk2-gmem
new file mode 100644
index 000000000000..fb640e6ad836
--- /dev/null
+++ b/security/pinentry/files/patch-gtk2-gmem
@@ -0,0 +1,145 @@
+--- gtk+-2/gtksecentry.c.orig 2007-11-19 16:20:50.000000000 +0500
++++ gtk+-2/gtksecentry.c 2008-04-26 22:52:13.000000000 +0600
+@@ -256,7 +256,7 @@
+
+ static GtkWidgetClass *parent_class = NULL;
+
+-gboolean g_use_secure_mem = FALSE;
++extern gboolean g_use_secure_mem;
+
+ # define g_sec_new(type, count) \
+ ((type *) g_sec_malloc ((unsigned) sizeof (type) * (count)))
+@@ -269,85 +269,6 @@
+ } while(0)
+
+
+-gpointer
+-g_malloc(gulong size)
+-{
+- gpointer p;
+-
+- if (size == 0)
+- return NULL;
+-
+- if (g_use_secure_mem)
+- p = (gpointer) secmem_malloc(size);
+- else
+- p = (gpointer) malloc(size);
+- if (!p)
+- g_error("could not allocate %ld bytes", size);
+-
+- return p;
+-}
+-
+-gpointer
+-g_malloc0(gulong size)
+-{
+- gpointer p;
+-
+- if (size == 0)
+- return NULL;
+-
+- if (g_use_secure_mem) {
+- p = (gpointer) secmem_malloc(size);
+- if (p)
+- memset(p, 0, size);
+- } else
+- p = (gpointer) calloc(size, 1);
+- if (!p)
+- g_error("could not allocate %ld bytes", size);
+-
+- return p;
+-}
+-
+-gpointer
+-g_realloc(gpointer mem, gulong size)
+-{
+- gpointer p;
+-
+- if (size == 0) {
+- g_free(mem);
+-
+- return NULL;
+- }
+-
+- if (!mem) {
+- if (g_use_secure_mem)
+- p = (gpointer) secmem_malloc(size);
+- else
+- p = (gpointer) malloc(size);
+- } else {
+- if (g_use_secure_mem) {
+- g_assert(m_is_secure(mem));
+- p = (gpointer) secmem_realloc(mem, size);
+- } else
+- p = (gpointer) realloc(mem, size);
+- }
+-
+- if (!p)
+- g_error("could not reallocate %lu bytes", (gulong) size);
+-
+- return p;
+-}
+-
+-void
+-g_free(gpointer mem)
+-{
+- if (mem) {
+- if (m_is_secure(mem))
+- secmem_free(mem);
+- else
+- free(mem);
+- }
+-}
+-
+ GType
+ gtk_secure_entry_get_type(void)
+ {
+--- gtk+-2/pinentry-gtk-2.c.orig 2007-11-19 16:44:07.000000000 +0500
++++ gtk+-2/pinentry-gtk-2.c 2008-04-26 22:52:13.000000000 +0600
+@@ -39,6 +39,7 @@
+
+ #include "gtksecentry.h"
+ #include "pinentry.h"
++#include "memory.h"
+
+ #ifdef FALLBACK_CURSES
+ #include "pinentry-curses.h"
+@@ -469,12 +470,36 @@
+
+ pinentry_cmd_handler_t pinentry_cmd_handler = gtk_cmd_handler;
+
++gboolean g_use_secure_mem = FALSE;
++
++static gpointer
++_malloc(gsize size) {
++ return g_use_secure_mem ? secmem_malloc(size) : malloc(size);
++}
++
++static gpointer
++_realloc(gpointer p, gsize size) {
++ return m_is_secure(p) ? secmem_realloc(p, size) : realloc(p, size);
++}
++
++static void
++_free(gpointer p) {
++ m_is_secure(p) ? secmem_free(p) : free(p);
++}
+
+ int
+ main (int argc, char *argv[])
+ {
+ pinentry_init (PGMNAME);
+-
++
++ GMemVTable mem_vtable = {
++ _malloc,
++ _realloc,
++ _free
++ };
++
++ g_mem_set_vtable (&mem_vtable);
++
+ #ifdef FALLBACK_CURSES
+ if (pinentry_have_display (argc, argv))
+ gtk_init (&argc, &argv);