From 7718f770695e9f2dd83c11cbdd29b35901583f59 Mon Sep 17 00:00:00 2001
From: Arun Prakash Jana <engineerarun@gmail.com>
Date: Sun, 12 Jan 2020 08:40:33 +0530
Subject: [PATCH] Add check for max val len in key:val pair

---
 src/nnn.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/nnn.c b/src/nnn.c
index 81e6929..b994786 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -2507,7 +2507,7 @@ static int xlink(char *prefix, char *path, char *curfname, char *buf, int *prese
 	return count;
 }
 
-static bool parsekvpair(kv *kvarr, char **envcpy, const char *cfgstr, uchar maxitems)
+static bool parsekvpair(kv *kvarr, char **envcpy, const char *cfgstr, uchar maxitems, size_t maxlen)
 {
 	int i = 0;
 	char *nextkey;
@@ -2549,6 +2549,10 @@ static bool parsekvpair(kv *kvarr, char **envcpy, const char *cfgstr, uchar maxi
 		kvarr[i].key = '\0';
 	}
 
+	for (i = 0; i < maxitems && kvarr[i].key; ++i)
+		if (strlen(kvarr[i].val) >= maxlen)
+			return FALSE;
+
 	return TRUE;
 }
 
@@ -5932,13 +5936,13 @@ int main(int argc, char *argv[])
 	DPRINTF_S(opener);
 
 	/* Parse bookmarks string */
-	if (!parsekvpair(bookmark, &bmstr, env_cfg[NNN_BMS], BM_MAX)) {
+	if (!parsekvpair(bookmark, &bmstr, env_cfg[NNN_BMS], BM_MAX, PATH_MAX)) {
 		fprintf(stderr, "%s\n", env_cfg[NNN_BMS]);
 		return _FAILURE;
 	}
 
 	/* Parse plugins string */
-	if (!parsekvpair(plug, &pluginstr, "NNN_PLUG", PLUGIN_MAX)) {
+	if (!parsekvpair(plug, &pluginstr, "NNN_PLUG", PLUGIN_MAX, PATH_MAX)) {
 		fprintf(stderr, "%s\n", "NNN_PLUG");
 		return _FAILURE;
 	}