Skip to content

Commit 230e779

Browse files
SimeonCSimeonC
SimeonC
authored and
SimeonC
committedJan 26, 2015
fix(taSanitize): Fix issue with last pre-tag overwriting all previous.
Fixes #508
1 parent 97f3564 commit 230e779

File tree

4 files changed

+28
-13
lines changed

4 files changed

+28
-13
lines changed
 

‎dist/textAngular.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎lib/factories.js

+11-6
Original file line numberDiff line numberDiff line change
@@ -132,17 +132,22 @@ angular.module('textAngular.factories', [])
132132
} catch (e){
133133
safe = oldsafe || '';
134134
}
135+
136+
// Do processing for <pre> tags, removing tabs and return carriages outside of them
137+
135138
var _preTags = safe.match(/(<pre[^>]*>.*?<\/pre[^>]*>)/ig);
136-
safe = safe.replace(/(&#(9|10);)*/ig, '');
137-
var re = /<pre[^>]*>.*?<\/pre[^>]*>/i;
139+
processedSafe = safe.replace(/(&#(9|10);)*/ig, '');
140+
var re = /<pre[^>]*>.*?<\/pre[^>]*>/ig;
138141
var index = 0;
142+
var lastIndex = 0;
139143
var origTag;
140-
while((origTag = re.exec(safe)) !== null && index < _preTags.length){
141-
safe = safe.substring(0, origTag.index) + _preTags[index] + safe.substring(origTag.index + origTag[0].length);
142-
re.lastIndex = Math.max(0, re.lastIndex + _preTags[index].length - origTag[0].length);
144+
safe = '';
145+
while((origTag = re.exec(processedSafe)) !== null && index < _preTags.length){
146+
safe += processedSafe.substring(lastIndex, origTag.index) + _preTags[index];
147+
lastIndex = origTag.index + origTag[0].length;
143148
index++;
144149
}
145-
return safe;
150+
return safe + processedSafe.substring(lastIndex);
146151
};
147152
}]).factory('taToolExecuteAction', ['$q', '$log', function($q, $log){
148153
// this must be called on a toolScope or instance

‎src/textAngular.js

+11-6
Original file line numberDiff line numberDiff line change
@@ -311,17 +311,22 @@ angular.module('textAngular.factories', [])
311311
} catch (e){
312312
safe = oldsafe || '';
313313
}
314+
315+
// Do processing for <pre> tags, removing tabs and return carriages outside of them
316+
314317
var _preTags = safe.match(/(<pre[^>]*>.*?<\/pre[^>]*>)/ig);
315-
safe = safe.replace(/(&#(9|10);)*/ig, '');
316-
var re = /<pre[^>]*>.*?<\/pre[^>]*>/i;
318+
processedSafe = safe.replace(/(&#(9|10);)*/ig, '');
319+
var re = /<pre[^>]*>.*?<\/pre[^>]*>/ig;
317320
var index = 0;
321+
var lastIndex = 0;
318322
var origTag;
319-
while((origTag = re.exec(safe)) !== null && index < _preTags.length){
320-
safe = safe.substring(0, origTag.index) + _preTags[index] + safe.substring(origTag.index + origTag[0].length);
321-
re.lastIndex = Math.max(0, re.lastIndex + _preTags[index].length - origTag[0].length);
323+
safe = '';
324+
while((origTag = re.exec(processedSafe)) !== null && index < _preTags.length){
325+
safe += processedSafe.substring(lastIndex, origTag.index) + _preTags[index];
326+
lastIndex = origTag.index + origTag[0].length;
322327
index++;
323328
}
324-
return safe;
329+
return safe + processedSafe.substring(lastIndex);
325330
};
326331
}]).factory('taToolExecuteAction', ['$q', '$log', function($q, $log){
327332
// this must be called on a toolScope or instance

‎test/taSanitize.spec.js

+5
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ describe('taSanitize', function(){
9797
var result = taSanitize('<p>&#10;Test &#10; &#9;Test 2&#10;&#9;</p><pre>&#9;Test &#10; &#9;Test 2&#10;&#9;</pre>', 'safe');
9898
expect(result).toBe('<p>Test Test 2</p><pre>&#9;Test &#10; &#9;Test 2&#10;&#9;</pre>');
9999
}));
100+
101+
it('correctly handles more than one pre-tag', inject(function(taSanitize){
102+
var result = taSanitize('<p>&#10;Test &#10; &#9;Test 2&#10;&#9;</p><pre>&#9;Test &#10; &#9;Test 1&#10;&#9;</pre><p>&#10;Test &#10; &#9;Test 2&#10;&#9;</p><pre>&#9;Test &#10; &#9;Test 2&#10;&#9;</pre>', 'safe');
103+
expect(result).toBe('<p>Test Test 2</p><pre>&#9;Test &#10; &#9;Test 1&#10;&#9;</pre><p>Test Test 2</p><pre>&#9;Test &#10; &#9;Test 2&#10;&#9;</pre>');
104+
}));
100105
});
101106

102107
describe('only certain style attributes are allowed', function(){

0 commit comments

Comments
 (0)