]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
mod_ssml: XML decode <audio src=".. attribute since iksemel SAX parser doesn't
authorChris Rienzo <chris.rienzo@grasshopper.com>
Thu, 20 Jun 2013 13:24:46 +0000 (09:24 -0400)
committerChris Rienzo <chris.rienzo@grasshopper.com>
Thu, 20 Jun 2013 13:25:45 +0000 (09:25 -0400)
src/mod/formats/mod_ssml/mod_ssml.c

index ce2e2059122a0a0bf19a46197b1ceb05fd19a0f1..d2d6dc1e08da3e1322ce7574bca2e51ae4b92f2e 100644 (file)
@@ -458,8 +458,8 @@ static int process_xml_lang(struct ssml_parser *parsed_data, char **atts)
                while (atts[i]) {
                        if (!strcmp("xml:lang", atts[i])) {
                                if (!zstr(atts[i + 1])) {
-                               strncpy(cur_node->language, atts[i + 1], LANGUAGE_LEN);
-                               cur_node->language[LANGUAGE_LEN - 1] = '\0';
+                                       strncpy(cur_node->language, atts[i + 1], LANGUAGE_LEN);
+                                       cur_node->language[LANGUAGE_LEN - 1] = '\0';
                                }
                        }
                        i += 2;
@@ -573,11 +573,19 @@ static int process_audio(struct ssml_parser *parsed_data, char **atts)
                while (atts[i]) {
                        if (!strcmp("src", atts[i])) {
                                char *src = atts[i + 1];
+                               ikstack *stack = NULL;
                                if (!zstr(src) && parsed_data->num_files < parsed_data->max_files) {
                                        /* get the URI */
+                                       if (strchr(src, '&')) {
+                                               stack = iks_stack_new(256, 0);
+                                               src = iks_unescape(stack, src, strlen(src));
+                                       }
                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Adding <audio>: \"%s\"\n", src);
                                        parsed_data->files[parsed_data->num_files].name = switch_core_strdup(parsed_data->pool, src);
                                        parsed_data->files[parsed_data->num_files++].prefix = NULL;
+                                       if (stack) {
+                                               iks_stack_delete(&stack);
+                                       }
                                }
                                return IKS_OK;
                        }