From cb38fb8744c46577efdb335a4b4e4950603cf97e Mon Sep 17 00:00:00 2001
From: Eric Oulashin <eric.oulashin@gmail.com>
Date: Sun, 8 Dec 2024 18:59:08 -0800
Subject: [PATCH] ddfilelister: Check whether 'desc' is a string in file
 metadata before trying to use it. Should fix issue #839

---
 xtrn/ddfilelister/ddfilelister.js      | 24 +++++++++++++++++-------
 xtrn/ddfilelister/readme.txt           |  4 ++--
 xtrn/ddfilelister/revision_history.txt |  2 ++
 3 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/xtrn/ddfilelister/ddfilelister.js b/xtrn/ddfilelister/ddfilelister.js
index b4106cc5cc..66a69635a9 100644
--- a/xtrn/ddfilelister/ddfilelister.js
+++ b/xtrn/ddfilelister/ddfilelister.js
@@ -147,6 +147,8 @@
  * 2024-11-24 Eric Oulashin     Version 2.25b
  *                              When editing file information, check whether cost and times_downloaded
  *                              exist in the metadata before accessing them
+ * 2024-12-08 Eric Oulashin     Version 2.25c
+ *                              Check whether 'desc' is a string in file metadata before trying to use it
  */
 
 "use strict";
@@ -188,8 +190,8 @@ var gAvatar = load({}, "avatar_lib.js");
 
 
 // Version information
-var LISTER_VERSION = "2.25b";
-var LISTER_DATE = "2024-11-24";
+var LISTER_VERSION = "2.25c";
+var LISTER_DATE = "2024-12-08";
 
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1106,6 +1108,9 @@ function showFileInfo_ANSI(pFileMetadata)
 			fileMetadata = pFileMetadata;
 	}
 
+	// Short file description (ensure we have a string)
+	var shortFileDesc = (typeof(fileMetadata.desc) === "string" ? fileMetadata.desc : "");
+
 	// The width of the frame to display the file info (including borders).  This
 	// is declared early so that it can be used for string length adjustment.
 	//var frameWidth = pFileListMenu.size.width - 4; // TODO: Remove?
@@ -1154,7 +1159,7 @@ function showFileInfo_ANSI(pFileMetadata)
 		fileInfoStr += format(fieldFormatStr, "File SHA-1", str);
 	}
 	// Short description
-	str = lfexpand(word_wrap(fileMetadata.desc, frameInnerWidth)).replace(/\r\n$/, "");
+	str = lfexpand(word_wrap(shortFileDesc, frameInnerWidth)).replace(/\r\n$/, "");
 	fileInfoStr += format(fieldFormatStr, "Description", str);
 	// Author, group
 	var authorStr = fileMetadata.hasOwnProperty("author") ? fileMetadata.author : "";
@@ -1340,6 +1345,9 @@ function showFileInfo_noANSI(pFileMetadata)
 	if (!fileMetadata.hasOwnProperty("extdesc"))
 		fileMetadata = getFileInfoFromFilebase(dirCode, fileMetadata.name, FileBase.DETAIL.EXTENDED);
 
+	// Short file description (ensure we have a string)
+	var shortFileDesc = (typeof(fileMetadata.desc) === "string" ? fileMetadata.desc : "");
+
 	var labelLen = 16;
 	var lblSep = " : ";
 	var valueLen = console.screen_columns - labelLen - console.strlen(lblSep) - 1;
@@ -1370,7 +1378,7 @@ function showFileInfo_noANSI(pFileMetadata)
 	if (fileMetadata.hasOwnProperty("sha1"))
 		printf(generalFormatStr, "File SHA-1", fileMetadata.sha1.substr(0, valueLen));
 	formatStr = "\x01n\x01g%-" + labelLen + "s\x01h" + lblSep + "\x01n" + gColors.desc + "%-" + valueLen + "s\x01n\r\n";
-	printf(formatStr, "Description", fileMetadata.desc.substr(0, valueLen));
+	printf(formatStr, "Description", shortFileDesc.substr(0, valueLen));
 	var authorStr = fileMetadata.hasOwnProperty("author") ? fileMetadata.author : "";
 	printf(generalFormatStr, "Author", authorStr.substr(0, valueLen));
 	var groupStr = fileMetadata.hasOwnProperty("author_org") ? fileMetadata.author_org : "";
@@ -1993,7 +2001,8 @@ function editFileInfo(pFileList, pFileListMenu)
 	var promptText = bbs.text(bbs.text.EditDescription);
 	var editWidth = console.screen_columns - console.strlen(promptText) - 1;
 	console.mnemonics(promptText);
-	newMetadata.desc = console.getstr(fileMetadata.desc, editWidth, K_EDIT|K_LINE|K_NOSPIN); // K_NOCRLF
+	var shortFileDesc = (typeof(fileMetadata.desc) === "string" ? fileMetadata.desc : "");
+	newMetadata.desc = console.getstr(shortFileDesc, editWidth, K_EDIT|K_LINE|K_NOSPIN); // K_NOCRLF
 	if (console.aborted)
 		return retObj;
 	// Tags
@@ -5704,10 +5713,11 @@ function doFileView(pDirCode, pFilespec)
 								addToQueueSuccessful = batchDLFile.iniSetValue(fileMetadata.name, "dir", pDirCode);
 								if (addToQueueSuccessful)
 								{
-									addToQueueSuccessful = batchDLFile.iniSetValue(fileMetadata.name, "desc", fileMetadata.desc);
+									var shortFileDesc = (typeof(fileMetadata.desc) === "string" ? fileMetadata.desc : "");
+									addToQueueSuccessful = batchDLFile.iniSetValue(fileMetadata.name, "desc", shortFileDesc);
 									// Update the batch DL queue stats object
 									++(batchDLQueueStats.numFilesInQueue);
-									batchDLQueueStats.filenames.push({ filename: fileMetadata.name, desc: fileMetadata.desc });
+									batchDLQueueStats.filenames.push({ filename: fileMetadata.name, desc: shortFileDesc });
 									batchDLQueueStats.totalSize += fileMetadata.size;
 									if (fileMetadata.hasOwnProperty("cost"))
 										batchDLQueueStats.totalCost += fileMetadata.cost;
diff --git a/xtrn/ddfilelister/readme.txt b/xtrn/ddfilelister/readme.txt
index 2a842a41b9..bfe7d33fcc 100644
--- a/xtrn/ddfilelister/readme.txt
+++ b/xtrn/ddfilelister/readme.txt
@@ -1,6 +1,6 @@
                         Digital Distortion File Lister
-                                 Version 2.25b
-                           Release date: 2024-11-24
+                                 Version 2.25c
+                           Release date: 2024-12-08
 
                                      by
 
diff --git a/xtrn/ddfilelister/revision_history.txt b/xtrn/ddfilelister/revision_history.txt
index 858957f965..942b25010c 100644
--- a/xtrn/ddfilelister/revision_history.txt
+++ b/xtrn/ddfilelister/revision_history.txt
@@ -5,6 +5,8 @@ Revision History (change log)
 =============================
 Version  Date         Description
 -------  ----         -----------
+2.25c    2024-12-08   Bug fix for trying to use 'desc' in file metadata and not
+                      checking whether it's defined.
 2.25b    2024-11-24   When editing file information, check whether cost and
                       times_downloaded exist in the metadata before accessing
                       them
-- 
GitLab