From c532a44ff8a179207c892929c324cb1a3db4ea12 Mon Sep 17 00:00:00 2001 From: Adrien Cadet Date: Thu, 18 Jun 2015 10:11:36 -0700 Subject: [PATCH] Fixes hazardous string issue --- Caravel.podspec | 4 ++-- caravel-test/EventDataController.swift | 1 + caravel-test/js/event_data.js | 8 ++++++++ caravel/DataSerializer.swift | 2 ++ caravel/js/Gruntfile.js | 2 +- caravel/js/caravel.min.js | 2 +- 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Caravel.podspec b/Caravel.podspec index 084646d..41db02a 100644 --- a/Caravel.podspec +++ b/Caravel.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |s| # s.name = "Caravel" - s.version = "0.2.0" + s.version = "0.2.1" s.summary = "A Swift event bus for UIWebView and JS" s.description = <<-DESC @@ -73,7 +73,7 @@ Pod::Spec.new do |s| # Supports git, hg, bzr, svn and HTTP. # - s.source = { :git => "https://github.com/coshx/caravel.git", :tag => "v0.2.0" } + s.source = { :git => "https://github.com/coshx/caravel.git", :tag => "v0.2.1" } # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # diff --git a/caravel-test/EventDataController.swift b/caravel-test/EventDataController.swift index d4db961..775c3a8 100644 --- a/caravel-test/EventDataController.swift +++ b/caravel-test/EventDataController.swift @@ -23,6 +23,7 @@ public class EventDataController: UIViewController { bus.post("Float", aFloat: 19.92) bus.post("Double", aDouble: 20.15) bus.post("String", aString: "Churchill") + bus.post("HazardousString", aString: "There is a \" and a '") bus.post("Array", anArray: [1, 2, 3, 5]) bus.post("Dictionary", aDictionary: ["foo": 45, "bar": 89]) bus.post("ComplexArray", anArray: [["name": "Alice", "age": 24], ["name": "Bob", "age": 23]]) diff --git a/caravel-test/js/event_data.js b/caravel-test/js/event_data.js index 878b3ad..85dd6e6 100644 --- a/caravel-test/js/event_data.js +++ b/caravel-test/js/event_data.js @@ -46,6 +46,14 @@ Caravel.getDefault().register("String", function(name, data) { } }); +Caravel.getDefault().register("HazardousString", function(name, data) { + if (data == "There is a \" and a '") { + ok(name); + } else { + fail(name, data); + } +}); + Caravel.getDefault().register("Array", function(name, data) { if (JSON.stringify(data) == JSON.stringify([1, 2, 3, 5])) { ok(name); diff --git a/caravel/DataSerializer.swift b/caravel/DataSerializer.swift index 134e7df..e16c0b7 100644 --- a/caravel/DataSerializer.swift +++ b/caravel/DataSerializer.swift @@ -32,6 +32,8 @@ internal class DataSerializer { output = "\(f)" case .String: var s = input as! String + s = s.stringByReplacingOccurrencesOfString("\"", withString: "\\\"", options: NSStringCompareOptions(), range: nil) + s = s.stringByReplacingOccurrencesOfString("'", withString: "\'", options: NSStringCompareOptions(), range: nil) output = "\"\(s)\"" case .Array, .Dictionary: // Array and Dictionary are serialized to JSON. diff --git a/caravel/js/Gruntfile.js b/caravel/js/Gruntfile.js index cafb8b0..d7388fe 100644 --- a/caravel/js/Gruntfile.js +++ b/caravel/js/Gruntfile.js @@ -1,7 +1,7 @@ module.exports = function (grunt) { 'use strict'; - var version = '0.2.0'; + var version = '0.2.1'; // Project configuration grunt.initConfig({ diff --git a/caravel/js/caravel.min.js b/caravel/js/caravel.min.js index af945bd..bf6443e 100644 --- a/caravel/js/caravel.min.js +++ b/caravel/js/caravel.min.js @@ -1,2 +1,2 @@ -/** Caravel 0.2.0 - https://github.com/coshx/caravel */ +/** Caravel 0.2.1 - https://github.com/coshx/caravel */ var Caravel;Caravel=function(){function Caravel(name){this.name=name,this.subscribers=[]}return Caravel["default"]=null,Caravel.buses=[],Caravel.prototype._post=function(eventName,data){var iframe,src;return iframe=document.createElement("iframe"),src="caravel@"+this.name+"@"+eventName,null!=data&&(src+="@"+data),iframe.setAttribute("src",src),document.documentElement.appendChild(iframe),iframe.parentNode.removeChild(iframe)},Caravel.prototype.getName=function(){return this.name},Caravel.prototype.post=function(name,data){return this._post(name,data)},Caravel.prototype.register=function(name,callback){return this.subscribers.push({name:name,callback:callback})},Caravel.prototype.raise=function(name,data){var e,i,len,parsedData,ref,results;for(parsedData=data instanceof Array||data instanceof Object||"string"==typeof data||data instanceof String?data:JSON.parse(data),ref=this.subscribers,results=[],i=0,len=ref.length;len>i;i++)e=ref[i],e.name===name?results.push(e.callback(name,parsedData)):results.push(void 0);return results},Caravel.getDefault=function(){return null==Caravel["default"]&&(Caravel["default"]=new Caravel("default"),Caravel["default"].post("CaravelInit")),Caravel["default"]},Caravel.get=function(name){var b,i,len,ref;for(ref=Caravel.buses,i=0,len=ref.length;len>i;i++)if(b=ref[i],b.getName()===name)return b;return b=new Caravel(name),Caravel.buses.push(b),b.post("CaravelInit"),b},Caravel}(); \ No newline at end of file