]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10240: [freeswitch-core] Use the "Negative Lookahead" in xml dialplan cause memory...
authorAnthony Minessale <anthm@freeswitch.org>
Mon, 5 Jun 2017 23:15:18 +0000 (18:15 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Mon, 5 Jun 2017 23:15:18 +0000 (18:15 -0500)
src/switch_channel.c
src/switch_regex.c

index 613956b40d4f41a01566bb5559aab52a7022a52c..39f86d838cef7214d453684ed8de86bcae89754e 100644 (file)
@@ -4405,15 +4405,17 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_timestamps(switch_channel_t *
                                X = malloc(len);
 
                                for (i = 0; i < proceed; i++) {
-                                       if (pcre_get_substring(dtstr, ovector, proceed, i, &replace) > 0) {
-                                               switch_size_t plen = strlen(replace);
-                                               memset(X, 'X', plen);
-                                               *(X+plen) = '\0';
-
-                                               switch_safe_free(substituted);
-                                               substituted = switch_string_replace(substituted ? substituted : dtstr, replace, X);
-
-                                               pcre_free_substring(replace);
+                                       if (pcre_get_substring(dtstr, ovector, proceed, i, &replace) >= 0) {
+                                               if (replace) {
+                                                       switch_size_t plen = strlen(replace);
+                                                       memset(X, 'X', plen);
+                                                       *(X+plen) = '\0';
+                                                       
+                                                       switch_safe_free(substituted);
+                                                       substituted = switch_string_replace(substituted ? substituted : dtstr, replace, X);
+                                                       
+                                                       pcre_free_substring(replace);
+                                               }
                                        }
                                }
 
index 6a3e067867e29dc3260f6af7fdfe77a4187805a8..911796a4b7a27fba1b890f22ec5ff4994b1cf07c 100644 (file)
@@ -174,12 +174,15 @@ SWITCH_DECLARE(void) switch_perform_substitution(switch_regex_t *re, int match_c
                                num = -1;
                        }
 
-                       if (pcre_get_substring(field_data, ovector, match_count, num, &replace) > 0) {
-                               switch_size_t r;
-                               for (r = 0; r < strlen(replace) && y < (len - 1); r++) {
-                                       substituted[y++] = replace[r];
+                       if (pcre_get_substring(field_data, ovector, match_count, num, &replace) >= 0) {
+                               if (replace) {
+                                       switch_size_t r;
+
+                                       for (r = 0; r < strlen(replace) && y < (len - 1); r++) {
+                                               substituted[y++] = replace[r];
+                                       }
+                                       pcre_free_substring(replace);
                                }
-                               pcre_free_substring(replace);
                        }
                } else {
                        substituted[y++] = data[x];
@@ -200,9 +203,11 @@ SWITCH_DECLARE(void) switch_capture_regex(switch_regex_t *re, int match_count, c
        int i;
 
        for (i = 0; i < match_count; i++) {
-               if (pcre_get_substring(field_data, ovector, match_count, i, &replace) > 0) {
-                       callback(var, replace, user_data);
-                       pcre_free_substring(replace);
+               if (pcre_get_substring(field_data, ovector, match_count, i, &replace) >= 0) {
+                       if (replace) {
+                               callback(var, replace, user_data);
+                               pcre_free_substring(replace);
+                       }
                }
        }
 }