Hi,
thanks for your report. Can you evaluate whether https://github.com/irs
si/irssi/pull/485 fixes your issue.

Thanks,
>From d6d74c0da981af22fb8cbfa68d3bdc5446c55155 Mon Sep 17 00:00:00 2001
From: ailin-nemui <ailin-ne...@users.noreply.github.com>
Date: Mon, 6 Jun 2016 16:58:40 +0200
Subject: [PATCH] Do not crash on OPTCHAN when item has no server

May fix bugs.debian.org#826525
---
 src/core/commands.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/core/commands.c b/src/core/commands.c
index 88d1208..607baf7 100644
--- a/src/core/commands.c
+++ b/src/core/commands.c
@@ -666,7 +666,7 @@ get_optional_channel(WI_ITEM_REC *active_item, char **data, int require_name)
 	const char *ret;
 	char *tmp, *origtmp, *channel;
 
-	if (active_item == NULL) {
+	if (active_item == NULL || active_item->server == NULL) {
                 /* no active channel in window, channel required */
 		return cmd_get_param(data);
 	}
@@ -674,11 +674,13 @@ get_optional_channel(WI_ITEM_REC *active_item, char **data, int require_name)
 	origtmp = tmp = g_strdup(*data);
 	channel = cmd_get_param(&tmp);
 
-	if (g_strcmp0(channel, "*") == 0 && !require_name) {
+	if (g_strcmp0(channel, "*") == 0 && IS_CHANNEL(active_item) &&
+	    !require_name) {
                 /* "*" means active channel */
 		cmd_get_param(data);
 		ret = window_item_get_target(active_item);
-	} else if (!server_ischannel(active_item->server, channel)) {
+	} else if (IS_CHANNEL(active_item) &&
+		   !server_ischannel(active_item->server, channel)) {
                 /* we don't have channel parameter - use active channel */
 		ret = window_item_get_target(active_item);
 	} else {

Reply via email to