From 054e906f6059366150bb7426973542203c8a0e4c Mon Sep 17 00:00:00 2001
From: Ulrich Sibiller <uli42@gmx.de>
Date: Fri, 21 Jun 2019 10:57:09 +0200
Subject: [PATCH] xkb: Use snprintf to measure string lengths instead of manual
 strlen math

  commit a4a2e814d5d0e6152307a301eda1d6fc1c555aaa
  Author: Alan Coopersmith <alan.coopersmith@oracle.com>
  Date:   Sun Feb 13 21:36:02 2011 -0800

    xkb: Use snprintf to measure string lengths instead of manual strlen math

    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
---
 nx-X11/programs/Xserver/xkb/ddxLoad.c  | 21 +++++++++++----------
 nx-X11/programs/Xserver/xkb/maprules.c |  3 +--
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/nx-X11/programs/Xserver/xkb/ddxLoad.c b/nx-X11/programs/Xserver/xkb/ddxLoad.c
index 306a3530..bff69196 100644
--- a/nx-X11/programs/Xserver/xkb/ddxLoad.c
+++ b/nx-X11/programs/Xserver/xkb/ddxLoad.c
@@ -404,15 +404,16 @@ FILE *	file;
                 &&(!isalpha(xkm_output_dir[0]) || xkm_output_dir[1]!=':')
 #endif
                 ) {
-	    if (strlen(XkbBaseDirectory)+strlen(xkm_output_dir)
-		     +strlen(mapName)+6 <= PATH_MAX)
-	    {
-	        sprintf(buf,"%s/%s%s.xkm",XkbBaseDirectory,
-					xkm_output_dir,mapName);
-	    }
+	     if (snprintf(buf, PATH_MAX, "%s/%s%s.xkm", XkbBaseDirectory,
+                           xkm_output_dir, mapName) >= PATH_MAX)
+	          buf[0] = '\0';
+	}
+	else
+	{
+	      if (snprintf(buf, PATH_MAX, "%s%s.xkm", xkm_output_dir, mapName)
+		  >= PATH_MAX)
+                  buf[0] = '\0';
 	}
-	else if (strlen(xkm_output_dir)+strlen(mapName)+5 <= PATH_MAX)
-	    sprintf(buf,"%s%s.xkm",xkm_output_dir,mapName);
 	if (buf[0] != '\0')
 	    file= fopen(buf,"rb");
 	else file= NULL;
@@ -505,9 +506,9 @@ XkbRF_RulesPtr	rules;
 	sprintf(buf,"rules/%s",rules_name);
     }
     else {
-	if (strlen(XkbBaseDirectory)+strlen(rules_name)+8 > PATH_MAX)
+	if (snprintf(buf, PATH_MAX, "%s/rules/%s", XkbBaseDirectory, rules_name)
+	    >= PATH_MAX)
 	    return False;
-        sprintf(buf,"%s/rules/%s",XkbBaseDirectory,rules_name);
     }
     if ((file= fopen(buf,"r"))==NULL)
 	return False;
diff --git a/nx-X11/programs/Xserver/xkb/maprules.c b/nx-X11/programs/Xserver/xkb/maprules.c
index af6c112f..6bc7e402 100644
--- a/nx-X11/programs/Xserver/xkb/maprules.c
+++ b/nx-X11/programs/Xserver/xkb/maprules.c
@@ -953,9 +953,8 @@ Bool		ok;
     if ((!base)||(!rules))
 	return False;
     if (locale) {
-	if (strlen(base)+strlen(locale)+2 > PATH_MAX)
+        if (snprintf(buf, PATH_MAX, "%s-%s", base, locale) >= PATH_MAX)
 	    return False;
-	sprintf(buf,"%s-%s", base, locale);
     }
     else {
 	if (strlen(base)+1 > PATH_MAX)
-- 
2.24.1