From f25ab7be5800a20440d3fa107f0ea626b982b85a Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Wed, 9 Oct 2013 13:52:44 -0400 Subject: [PATCH] Bug 915850 - ensure that telemetry pings are sent as UTF-8; r=vladan --- toolkit/components/telemetry/TelemetryPing.js | 7 ++++++- .../telemetry/tests/unit/test_TelemetryPing.js | 10 ++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/toolkit/components/telemetry/TelemetryPing.js b/toolkit/components/telemetry/TelemetryPing.js index 7dbbe31b356..3b462019ddb 100644 --- a/toolkit/components/telemetry/TelemetryPing.js +++ b/toolkit/components/telemetry/TelemetryPing.js @@ -681,9 +681,14 @@ TelemetryPing.prototype = { request.addEventListener("load", handler(true, onSuccess).bind(this), false); request.setRequestHeader("Content-Encoding", "gzip"); + let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"] + .createInstance(Ci.nsIScriptableUnicodeConverter); + converter.charset = "UTF-8"; + let utf8Payload = converter.ConvertFromUnicode(JSON.stringify(ping.payload)); + utf8Payload += converter.Finish(); let payloadStream = Cc["@mozilla.org/io/string-input-stream;1"] .createInstance(Ci.nsIStringInputStream); - payloadStream.data = this.gzipCompressString(JSON.stringify(ping.payload)); + payloadStream.data = this.gzipCompressString(utf8Payload); request.send(payloadStream); }, diff --git a/toolkit/components/telemetry/tests/unit/test_TelemetryPing.js b/toolkit/components/telemetry/tests/unit/test_TelemetryPing.js index 06666cb9501..c859b779c94 100644 --- a/toolkit/components/telemetry/tests/unit/test_TelemetryPing.js +++ b/toolkit/components/telemetry/tests/unit/test_TelemetryPing.js @@ -23,7 +23,8 @@ const IGNORE_HISTOGRAM_TO_CLONE = "MEMORY_HEAP_ALLOCATED"; const IGNORE_CLONED_HISTOGRAM = "test::ignore_me_also"; const ADDON_NAME = "Telemetry test addon"; const ADDON_HISTOGRAM = "addon-histogram"; -const FLASH_VERSION = "1.1.1.1"; +// Add some unicode characters here to ensure that sending them works correctly. +const FLASH_VERSION = "\u201c1.1.1.1\u201d"; const SHUTDOWN_TIME = 10000; const FAILED_PROFILE_LOCK_ATTEMPTS = 2; @@ -155,7 +156,12 @@ function decodeRequestPayload(request) { converter.onStartRequest(null, null); converter.onDataAvailable(null, null, s, 0, s.available()); converter.onStopRequest(null, null, null); - payload = decoder.decode(observer.buffer); + let unicodeConverter = Cc["@mozilla.org/intl/scriptableunicodeconverter"] + .createInstance(Ci.nsIScriptableUnicodeConverter); + unicodeConverter.charset = "UTF-8"; + let utf8string = unicodeConverter.ConvertToUnicode(observer.buffer); + utf8string += unicodeConverter.Finish(); + payload = decoder.decode(utf8string); } else { payload = decoder.decodeFromStream(s, s.available()); }