Fix off-by-one issue with sort (bug #5459)
authorMark Spencer <markster@digium.com>
Tue, 18 Oct 2005 16:48:19 +0000 (16:48 +0000)
committerMark Spencer <markster@digium.com>
Tue, 18 Oct 2005 16:48:19 +0000 (16:48 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6816 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_cut.c

index dd40bb4..9c0629a 100755 (executable)
@@ -93,7 +93,7 @@ static int sort_subroutine(const void *arg1, const void *arg2)
 static int sort_internal(struct ast_channel *chan, char *data, char *buffer, size_t buflen)
 {
        char *strings, *ptrkey, *ptrvalue;
-       int count=1, count2;
+       int count=1, count2, element_count=0;
        struct sortable_keys *sortable_keys;
 
        memset(buffer, 0, buflen);
@@ -139,13 +139,13 @@ static int sort_internal(struct ast_channel *chan, char *data, char *buffer, siz
        qsort(sortable_keys, count, sizeof(struct sortable_keys), sort_subroutine);
 
        for (count2 = 0; count2 < count; count2++) {
-               strncat(buffer + strlen(buffer), sortable_keys[count2].key, buflen - strlen(buffer));
-               strncat(buffer + strlen(buffer), ",", buflen - strlen(buffer));
+               int blen = strlen(buffer);
+               if (element_count++) {
+                       strncat(buffer + blen, ",", buflen - blen - 1);
+               }
+               strncat(buffer + blen + 1, sortable_keys[count2].key, buflen - blen - 2);
        }
 
-       /* Remove trailing comma */
-       buffer[strlen(buffer) - 1] = '\0';
-
        return 0;
 }