From 75ede9e9ae4b9db7233f82741544b4b1b6ee67a1 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Sat, 15 Jun 2019 03:05:56 +0000
Subject: [PATCH] Don't try to iterate through argv if argc is undefined (e.g.
 invoked via load({}, "sbbsimsg.js") with no args). the
 sbbsimsg_lib.parse_active_users() will now return a string on failure, so
 display appropriately.

---
 exec/sbbsimsg.js | 53 +++++++++++++++++++++++++++---------------------
 1 file changed, 30 insertions(+), 23 deletions(-)

diff --git a/exec/sbbsimsg.js b/exec/sbbsimsg.js
index 9ee2b1b6a8..00a49d70fc 100644
--- a/exec/sbbsimsg.js
+++ b/exec/sbbsimsg.js
@@ -42,27 +42,29 @@ var last_user=0;
 lib.read_sys_list();
 
 // Parse arguments
-for(i=0; i<argc; i++) {
-	if(argv[i].toLowerCase()=="-l") {
-		console.clear();
-		writeln("Inter-BBS Active Users:");
-		var timeout = 2500;
-		var sent = lib.request_active_users();
-		if(parseInt(argv[i+1]))
-			timeout = parseInt(argv[i+1]);
-		function poll_callback(loop)
-		{
-			printf("%c\1[", "/-\\|"[loop%4]);
-			if(console.inkey(0))
-				return true;
+if(this.argc) {
+	for(i=0; i<argc; i++) {
+		if(argv[i].toLowerCase()=="-l") {
+			console.clear();
+			writeln("Inter-BBS Active Users:");
+			var timeout = 2500;
+			var sent = lib.request_active_users();
+			if(parseInt(argv[i+1]))
+				timeout = parseInt(argv[i+1]);
+			function poll_callback(loop)
+			{
+				printf("%c\1[", "/-\\|"[loop%4]);
+				if(console.inkey(0))
+					return true;
+			}
+			lib.poll_systems(sent, 0.25, timeout, poll_callback);
+			list_users();
+			exit();
+		}
+		if(argv[i].toLowerCase()=="-d") {
+			print(lfexpand(JSON.stringify(lib.sys_list, null, 4)));
+			exit();
 		}
-		lib.poll_systems(sent, 0.25, timeout, poll_callback);
-		list_users();
-		exit();
-	}
-	if(argv[i].toLowerCase()=="-d") {
-		print(lfexpand(JSON.stringify(lib.sys_list, null, 4)));
-		exit();
 	}
 }
 
@@ -194,6 +196,7 @@ while(bbs.online) {
 	var key;
 	var last_request = 0;
 	var request_interval = 60;	// seconds
+	var valid_keys = "QLTM\rD";
 	while(bbs.online && !console.aborted) {
 		if(time() - last_request >= request_interval) {
 			lib.request_active_users();
@@ -204,8 +207,8 @@ while(bbs.online) {
 			var message = lib.receive_active_users();
 			if(message) {
 				var result = lib.parse_active_users(message, logon_callback, logoff_callback);
-				if(!result)
-					log(LOG_WARNING, "Failure to parse: "+ JSON.stringify(message));
+				if(result !== true)
+					log(LOG_WARNING, format("%s: %s", result, JSON.stringify(message)));
 			}
 		}
 		bbs.nodesync(true);
@@ -213,10 +216,14 @@ while(bbs.online) {
 			continue prompt;
 		}
 		key=console.inkey(K_UPPER, 500);
-		if(key=='Q' || key=='L' || key=='T' || key=='M' || key=='\r')
+		if(key && valid_keys.indexOf(key) >= 0)
 			break;
 	}
 	switch(key) {
+		case 'D':
+			for(var i in lib.sys_list)
+				print(i + ' = ' + JSON.stringify(lib.sys_list[i]));
+			break;
 		case 'L':
 			print("\1h\1cList\r\n");
 			list_users();
-- 
GitLab