From d00befe45c5d41da85172e71074b56af33aa59b5 Mon Sep 17 00:00:00 2001 From: Fred Blundun Date: Fri, 27 Jun 2014 13:51:54 +0100 Subject: [PATCH 1/4] Changed Base64 encoding function to prevent character encoding errors (#231) --- CHANGELOG | 4 ++++ package.json | 3 +-- src/js/payload.js | 6 ++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index f70dbb9d7..b1ff0ef95 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +Version 1.0.3 (2014-XX-XX) +-------------------------- +Changed Base64 encoding function to prevent character encoding errors (#231) + Version 1.0.2 (2014-06-24) -------------------------- Added guard to prevent document size field from being set as "NaNxNaN" (#220) diff --git a/package.json b/package.json index 6f8e3915c..7f503ee68 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "snowplow-tracker", - "version": "1.0.2", + "version": "1.0.3", "devDependencies": { "grunt": "~0.4.2", "intern": "~1.4.0", @@ -14,7 +14,6 @@ "grunt-browserify": "~1.3.0", "jstimezonedetect": "~1.0.5", "JSON": "~1.0.0", - "Base64": "~0.2.0", "sha1": "git://github.com/pvorb/node-sha1.git#v1.0.0", "grunt-lodash": "~0.3.0" }, diff --git a/src/js/payload.js b/src/js/payload.js index 7dc633a6e..b875ec2c0 100644 --- a/src/js/payload.js +++ b/src/js/payload.js @@ -37,9 +37,7 @@ var lodash = require('./lib/lodash'), json2 = require('JSON'), - Base64 = require('Base64'), - base64encode = Base64.btoa, - base64decode = Base64.atob, + base64 = require('./lib/base64'), object = typeof exports !== 'undefined' ? exports : this; // For eventual node.js environment support @@ -51,7 +49,7 @@ function base64urlencode(data) { if (!data) return data; - var enc = base64encode(data); + var enc = base64.base64encode(data); return enc.replace(/=/g, '') .replace(/\+/g, '-') .replace(/\//g, '_'); From b21682dec7b5bc46084192482a59b558b825d171 Mon Sep 17 00:00:00 2001 From: Fred Blundun Date: Fri, 27 Jun 2014 13:54:24 +0100 Subject: [PATCH 2/4] Added new file and bumped version to 1.0.3 --- src/js/lib/base64.js | 82 ++++++++++++++++++++++++++++++++++++++++++++ src/js/snowplow.js | 2 +- 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/js/lib/base64.js diff --git a/src/js/lib/base64.js b/src/js/lib/base64.js new file mode 100644 index 000000000..715c0e63b --- /dev/null +++ b/src/js/lib/base64.js @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2013 Kevin van Zonneveld (http://kvz.io) + * and Contributors (http://phpjs.org/authors) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +(function() { + + var object = typeof exports !== 'undefined' ? exports : this; // For eventual node.js environment support + + function base64_encode(data) { + // discuss at: http://phpjs.org/functions/base64_encode/ + // original by: Tyler Akins (http://rumkin.com) + // improved by: Bayron Guevara + // improved by: Thunder.m + // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // improved by: Rafał Kukawski (http://kukawski.pl) + // bugfixed by: Pellentesque Malesuada + // example 1: base64_encode('Kevin van Zonneveld'); + // returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' + // example 2: base64_encode('a'); + // returns 2: 'YQ==' + // example 3: base64_encode('✓ à la mode'); + // returns 3: '4pyTIMOgIGxhIG1vZGU=' + + var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, + ac = 0, + enc = '', + tmp_arr = []; + + if (!data) { + return data; + } + + data = unescape(encodeURIComponent(data)); + + do { + // pack three octets into four hexets + o1 = data.charCodeAt(i++); + o2 = data.charCodeAt(i++); + o3 = data.charCodeAt(i++); + + bits = o1 << 16 | o2 << 8 | o3; + + h1 = bits >> 18 & 0x3f; + h2 = bits >> 12 & 0x3f; + h3 = bits >> 6 & 0x3f; + h4 = bits & 0x3f; + + // use hexets to index into b64, and append result to encoded string + tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); + } while (i < data.length); + + enc = tmp_arr.join(''); + + var r = data.length % 3; + + return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3); + } + + object.base64encode = base64_encode; + +}()); diff --git a/src/js/snowplow.js b/src/js/snowplow.js index 45e5c0ed1..4c5b13696 100644 --- a/src/js/snowplow.js +++ b/src/js/snowplow.js @@ -88,7 +88,7 @@ windowAlias = window, /* Tracker identifier with version */ - version = 'js-1.0.2', // Update banner.js too + version = 'js-1.0.3', /* Contains three variables that are shared with tracker.js and must be passed by reference */ mutSnowplowState = { From 62f8c0eb093c661c5de77a297ec174b9c1fa3a27 Mon Sep 17 00:00:00 2001 From: Alex Dean Date: Sat, 28 Jun 2014 00:40:44 +0100 Subject: [PATCH 3/4] Finalized CHANGELOG for release --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index b1ff0ef95..6537fee96 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,4 @@ -Version 1.0.3 (2014-XX-XX) +Version 1.0.3 (2014-06-27) -------------------------- Changed Base64 encoding function to prevent character encoding errors (#231) From 869f8ec4567dce5577b149b439f5d096390a60f9 Mon Sep 17 00:00:00 2001 From: Alex Dean Date: Sat, 28 Jun 2014 00:41:15 +0100 Subject: [PATCH 4/4] Added in credit --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 6537fee96..a0dcc374f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,6 @@ Version 1.0.3 (2014-06-27) -------------------------- -Changed Base64 encoding function to prevent character encoding errors (#231) +Changed Base64 encoding function to prevent character encoding errors, thanks @shermozle! (#231) Version 1.0.2 (2014-06-24) --------------------------