swrun_*: snprint may have set a too long string length. Fix it if needed.
diff --git a/agent/mibgroup/host/data_access/swrun_cygwin.c b/agent/mibgroup/host/data_access/swrun_cygwin.c
index ca5194d..fcecbe6 100644
--- a/agent/mibgroup/host/data_access/swrun_cygwin.c
+++ b/agent/mibgroup/host/data_access/swrun_cygwin.c
@@ -222,6 +222,8 @@
                 }
             }
         }
+        if (entry->hrSWRunPath_len >= sizeof(entry->hrSWRunPath))
+            entry->hrSWRunPath_len = sizeof(entry->hrSWRunPath)-1;
         /*
          * Set hrSWRunName to be the last component of hrSWRunPath,
          *    but without any file extension
@@ -241,6 +243,8 @@
 
             if ( cp1 )
                 *cp1 = '.';     /* Restore the file extension */
+            if (entry->hrSWRunName_len >= sizeof(entry->hrSWRunName))
+                entry->hrSWRunName_len = sizeof(entry->hrSWRunName)-1;
         }
 
         /*
diff --git a/agent/mibgroup/host/data_access/swrun_kinfo.c b/agent/mibgroup/host/data_access/swrun_kinfo.c
index 0869eac..fc4ed7a 100644
--- a/agent/mibgroup/host/data_access/swrun_kinfo.c
+++ b/agent/mibgroup/host/data_access/swrun_kinfo.c
@@ -177,7 +177,7 @@
 {
     struct SWRUN_TABLE  *proc_table;
     int                  nprocs, i, rc;
-    char                 buf[BUFSIZ], **argv;
+    char                 buf[BUFSIZ+1], **argv;
     netsnmp_swrun_entry *entry;
 
     if ( 0 == kd ) {
@@ -225,11 +225,16 @@
         entry->hrSWRunName_len = snprintf(entry->hrSWRunName,
                                    sizeof(entry->hrSWRunName)-1,
                                           "%s", proc_table[i].SWRUN_K_COMM);
+        if (entry->hrSWRunName_len >= sizeof(entry->hrSWRunName))
+            entry->hrSWRunName_len = sizeof(entry->hrSWRunName)-1;
 
-        if ( argv && *argv)
+        if ( argv && *argv) {
             entry->hrSWRunPath_len = snprintf(entry->hrSWRunPath,
                                        sizeof(entry->hrSWRunPath)-1,
                                               "%s", argv[0]);
+            if (entry->hrSWRunPath_len >= sizeof(entry->hrSWRunPath))
+                entry->hrSWRunPath_len = sizeof(entry->hrSWRunPath)-1;
+        }
         else {
             memcpy( entry->hrSWRunPath, entry->hrSWRunName,
                                         entry->hrSWRunName_len );
@@ -252,13 +257,17 @@
         if (argv)
             argv++;    /* Skip argv[0] */
         while ( argv && *argv ) {
-	    strncat(buf, " ", sizeof(buf) - strlen(buf) - 1);
-	    strncat(buf, *argv, sizeof(buf) - strlen(buf) - 1);
+            strcat(buf, " ");
+            strcat(buf, *argv);
             argv++;
         }
+        if (strlen(buf) >= BUFSIZ-10)
+            snmp_log(LOG_ERR, "params %lu/%d %s\n", strlen(buf), BUFSIZ, buf);
         entry->hrSWRunParameters_len = snprintf(entry->hrSWRunParameters,
-                                         sizeof(entry->hrSWRunParameters)-1,
+                                         sizeof(entry->hrSWRunParameters),
                                           "%s", buf+1);
+        if (entry->hrSWRunParameters_len >= sizeof(entry->hrSWRunParameters))
+            entry->hrSWRunParameters_len = sizeof(entry->hrSWRunParameters)-1;
 
         entry->hrSWRunType = (P_SYSTEM & proc_table[i].SWRUN_K_FLAG) 
 #ifdef SWRUN_K_CLASS
diff --git a/agent/mibgroup/host/data_access/swrun_kvm_proc.c b/agent/mibgroup/host/data_access/swrun_kvm_proc.c
index ae6876e..e2dc86c 100644
--- a/agent/mibgroup/host/data_access/swrun_kvm_proc.c
+++ b/agent/mibgroup/host/data_access/swrun_kvm_proc.c
@@ -112,6 +112,8 @@
         entry->hrSWRunName_len = snprintf(entry->hrSWRunName,
                                    sizeof(entry->hrSWRunName)-1,
                                           "%s", proc_buf->p_user.u_comm);
+        if (entry->hrSWRunName_len >= sizeof(entry->hrSWRunName))
+            entry->hrSWRunName_len = sizeof(entry->hrSWRunName)-1;
         /*
          *  Split u_psargs into two:
          *     argv[0]   is hrSWRunPath
@@ -123,9 +125,13 @@
         entry->hrSWRunPath_len = snprintf(entry->hrSWRunPath,
                                    sizeof(entry->hrSWRunPath)-1,
                                           "%s", proc_buf->p_user.u_psargs);
+        if (entry->hrSWRunPath_len >= sizeof(entry->hrSWRunPath))
+            entry->hrSWRunPath_len = sizeof(entry->hrSWRunPath)-1;
         entry->hrSWRunParameters_len = snprintf(entry->hrSWRunParameters,
                                          sizeof(entry->hrSWRunParameters)-1,
                                           "%s", cp+1);
+        if (entry->hrSWRunParameters_len >= sizeof(entry->hrSWRunParameters))
+            entry->hrSWRunParameters_len = sizeof(entry->hrSWRunParameters)-1;
         *cp = ' ';     /* Restore u_psargs value */
 
         /*
diff --git a/agent/mibgroup/host/data_access/swrun_procfs_psinfo.c b/agent/mibgroup/host/data_access/swrun_procfs_psinfo.c
index c8124d4..6cafd9c 100644
--- a/agent/mibgroup/host/data_access/swrun_procfs_psinfo.c
+++ b/agent/mibgroup/host/data_access/swrun_procfs_psinfo.c
@@ -93,6 +93,8 @@
             = sprintf(entry->hrSWRunName, "%.*s",
                       (int)sizeof(entry->hrSWRunName) - 1,
                       psinfo.pr_fname);
+        if (entry->hrSWRunName_len >= sizeof(entry->hrSWRunName))
+            entry->hrSWRunName_len = sizeof(entry->hrSWRunName)-1;
         /*
          *  Split pr_psargs into two:
          *     argv[0]   is hrSWRunPath
@@ -105,10 +107,14 @@
             = sprintf(entry->hrSWRunPath, "%.*s",
                       (int)sizeof(entry->hrSWRunPath) - 1,
                       psinfo.pr_psargs);
+        if (entry->hrSWRunPath_len >= sizeof(entry->hrSWRunPath))
+            entry->hrSWRunPath_len = sizeof(entry->hrSWRunPath)-1;
 
         entry->hrSWRunParameters_len
             = sprintf(entry->hrSWRunParameters, "%.*s",
                       (int)sizeof(entry->hrSWRunParameters) - 1, cp+1);
+        if (entry->hrSWRunParameters_len >= sizeof(entry->hrSWRunParameters))
+            entry->hrSWRunParameters_len = sizeof(entry->hrSWRunParameters)-1;
         *cp = ' ';     /* Restore pr_psargs value */
 
         /*