output[0] = '\0';
- while ((break_point = strpbrk(copy, "<>\"&'"))) {
+ while ((break_point = strpbrk(copy, "<>\"&'\n\r"))) {
char to_escape = *break_point;
*break_point = '\0';
case '\'':
strncat(output, "'", len);
break;
+ case '\r':
+ strncat(output, " ", len);
+ break;
+ case '\n':
+ strncat(output, " ", len);
+ break;
};
copy = break_point + 1;
{
struct ast_sip_exten_state_data *state_data = data;
pj_xml_node *node;
+ char sanitized[256];
if (ast_strlen_zero(state_data->user_agent) ||
!strstr(state_data->user_agent, "digium")) {
}
if (!ast_strlen_zero(state_data->presence_message)) {
- pj_strdup2(state_data->pool, &node->content,
- state_data->presence_message);
+ ast_sip_sanitize_xml(state_data->presence_message, sanitized, sizeof(sanitized));
+ pj_strdup2(state_data->pool, &node->content, sanitized);
}
ast_sip_presence_xml_create_attr(
state_data->presence_state));
if (!ast_strlen_zero(state_data->presence_subtype)) {
+ ast_sip_sanitize_xml(state_data->presence_subtype, sanitized, sizeof(sanitized));
ast_sip_presence_xml_create_attr(
- state_data->pool, node, "subtype",
- state_data->presence_subtype);
+ state_data->pool, node, "subtype", sanitized);
}
return 0;