--- xipmsg.c.org	Thu May  8 14:34:16 1997
+++ xipmsg.c	Wed Aug 18 14:43:48 1999
@@ -345,6 +345,7 @@
 static void
 done_proc(Widget w, XtPointer closure, XtPointer call_data)
 {
+	if (closure != NULL) free(closure);
 	if (bogus_fix)
 		XtPopdown(XtParent(XtParent(w)));
 	else
@@ -591,6 +592,7 @@
 send_proc(Widget w, XtPointer closure, XtPointer call_data)
 {
 	struct maddr_t *replyto = closure;
+	struct ns_t *ns;
 	Widget dialog = XtParent(w);
 	String msg, label;
 	Pixmap icon;
@@ -614,10 +616,14 @@
 			XDefineCursor(XtDisplay(dialog), XtWindow(dialog), csr_clock);
 			XDefineCursor(XtDisplay(toplevel), XtWindow(toplevel), csr_clock);
 			XFlush(XtDisplay(dialog));
-			err = bro_send(msg, pat, replyto);
+			if (ns_lookup(replyto) != NULL)
+				err = bro_send(msg, pat, replyto);
+			else
+				err = !0;
 			XUndefineCursor(XtDisplay(toplevel), XtWindow(toplevel));
 			XUndefineCursor(XtDisplay(dialog), XtWindow(dialog));
 			if (err == 0) {
+				free(closure);
 				if (bogus_fix)
 					XtPopdown(XtParent(dialog));
 				else
@@ -701,6 +707,7 @@
 		XtNfromHoriz, NULL,
 		NULL);
 	Position nx, ny;
+	XtPointer addr;
 	XtAddCallback(send_to, XtNdestroyCallback, destroy_proc, label);
 	make_menu("icon_menu", "icon", icon_button, NULL, NUMBER_OF_MENU, icon_select);
 	if (last_msg[0] == '\0') {
@@ -708,9 +715,11 @@
 		XtVaGetValues(entry, XtNleftBitmap, &last_icon, NULL);
 	}
 	XtVaSetValues(icon_button, XtNbitmap, last_icon, NULL);
+	addr = malloc(sizeof(struct maddr_t));
+	memcpy(addr, dstaddr, sizeof(struct maddr_t));
 	XawDialogAddButton(send_to, "clear", clear_proc, NULL);
-	XawDialogAddButton(send_to, "cancel", done_proc, NULL);
-	XawDialogAddButton(send_to, "send", send_proc, (XtPointer)dstaddr);
+	XawDialogAddButton(send_to, "cancel", done_proc, addr);
+	XawDialogAddButton(send_to, "send", send_proc, addr);
 	XtTranslateCoords(parent, 0, 0, &nx, &ny);
 	XtVaSetValues(send_popup, XtNx, nx, XtNy, ny, NULL);
 	XtPopup(send_popup, XtGrabNone);
