summaryrefslogtreecommitdiffstats
path: root/src/tools/sdpscanner/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/sdpscanner/main.cpp')
-rw-r--r--src/tools/sdpscanner/main.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/tools/sdpscanner/main.cpp b/src/tools/sdpscanner/main.cpp
index d0c3e2cc..6d9965f1 100644
--- a/src/tools/sdpscanner/main.cpp
+++ b/src/tools/sdpscanner/main.cpp
@@ -3,6 +3,7 @@
#include <QtCore/QByteArray>
#include <QtCore/QDebug>
+#include <QtCore/QUrl>
#include <stdio.h>
#include <string>
#include <bluetooth/bluetooth.h>
@@ -177,10 +178,17 @@ static void parseAttributeValues(sdp_data_t *data, int indentation, QByteArray &
case SDP_URL_STR8:
case SDP_URL_STR16:
case SDP_URL_STR32:
+ {
xmlOutput.append("<url value=\"");
- xmlOutput.append(data->val.str, qstrnlen(data->val.str, data->unitSize));
+ const QByteArray urlData =
+ QByteArray::fromRawData(data->val.str, qstrnlen(data->val.str, data->unitSize));
+ const QUrl url = QUrl::fromEncoded(urlData);
+ // Encoded url %-encodes all of the XML special characters except '&',
+ // so we need to do that manually
+ xmlOutput.append(url.toEncoded().replace('&', "&amp;"));
xmlOutput.append("\"/>\n");
break;
+ }
default:
fprintf(stderr, "Unknown dtd type\n");
}