]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add patch from FSCORE-136
authorAnthony Minessale <anthony.minessale@gmail.com>
Fri, 6 Jun 2008 13:43:41 +0000 (13:43 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Fri, 6 Jun 2008 13:43:41 +0000 (13:43 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@8776 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_channel.c

index 5a469b867065e96e557e6fa93ab68343cfdc1c36..8bf1bcffdb1f8265e7ae1496431f2b5a2368fc32 100644 (file)
@@ -1599,8 +1599,8 @@ SWITCH_DECLARE(char *) switch_channel_expand_variables(switch_channel_t *channel
        char *p, *c = NULL;
        char *data, *indup;
        size_t sp = 0, len = 0, olen = 0, vtype = 0, br = 0, cpos, block = 128;
-       const char *q, *sub_val = NULL;
-       char *cloned_sub_val = NULL;
+       const char *q;
+       char *cloned_sub_val = NULL, *sub_val = NULL;
        char *func_val = NULL;
        int nv = 0;
 
@@ -1743,7 +1743,7 @@ SWITCH_DECLARE(char *) switch_channel_expand_variables(switch_channel_t *channel
                                                }
                                        }
 
-                                       if ((sub_val = switch_channel_get_variable(channel, vname))) {
+                                       if ((sub_val = (char *) switch_channel_get_variable(channel, vname))) {
                                                if (offset || ooffset) {
                                                        cloned_sub_val = strdup(sub_val);
                                                        switch_assert(cloned_sub_val);
@@ -1751,7 +1751,11 @@ SWITCH_DECLARE(char *) switch_channel_expand_variables(switch_channel_t *channel
                                                }
 
                                                if (offset >= 0) {
-                                                       sub_val += offset;
+                                                       if (offset > strlen(sub_val)) {
+                                                               *sub_val = '\0';
+                                                       } else {
+                                                               sub_val += offset;
+                                                       }
                                                } else if ((size_t) abs(offset) <= strlen(sub_val)) {
                                                        sub_val = cloned_sub_val + (strlen(cloned_sub_val) + offset);
                                                }