Index: trunk/mem.c
===================================================================
--- trunk/mem.c	(revision 54)
+++ trunk/mem.c	(revision 112)
@@ -242,5 +242,7 @@
 	void *p = xc_mem_malloc(mem, realsize);
 
-	memset(p, 0, realsize);
+	if (p) {
+		memset(p, 0, realsize);
+	}
 	return p;
 }
@@ -249,6 +251,8 @@
 {
 	void *newp = xc_mem_malloc(mem, size);
-	memcpy(newp, p, size);
-	xc_mem_free(mem, p);
+	if (p) {
+		memcpy(newp, p, size);
+		xc_mem_free(mem, p);
+	}
 	return newp;
 }
@@ -257,5 +261,7 @@
 {
 	void *p = xc_mem_malloc(mem, len + 1);
-	memcpy(p, str, len + 1);
+	if (p) {
+		memcpy(p, str, len + 1);
+	}
 	return p;
 }
