forked from sheetjs/sheetjs
		
	enforcing 31 character sheet name restriction
This commit is contained in:
		
							parent
							
								
									f63426167d
								
							
						
					
					
						commit
						d882757c0a
					
				| @ -28,7 +28,6 @@ var rencstr = "&<>'\"".split(""); | ||||
| function unescapexml(text){ | ||||
| 	var s = text + ''; | ||||
| 	s = s.replace(/"/g, '"').replace(/'/g, "'").replace(/>/g, ">").replace(/</g, "<").replace(/&/g, "&"); | ||||
| 	//for(var y in encodings) s = s.replace(new RegExp(y,'g'), encodings[y]);
 | ||||
| 	return s.replace(/_x([0-9a-fA-F]*)_/g,function(m,c) {return _chr(parseInt(c,16));}); | ||||
| } | ||||
| function escapexml(text){ | ||||
|  | ||||
| @ -18,31 +18,37 @@ function parse_ws_xml(data, opts, rels) { | ||||
| 	} | ||||
| 
 | ||||
| 	var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} }; | ||||
| 	var q = (opts.cellFormula ? ["v","f"] : ["v"]); | ||||
| 	var sidx = 0; | ||||
| 
 | ||||
| 	var match_v = matchtag("v"), match_f = matchtag("f"); | ||||
| 	/* 18.3.1.80 sheetData CT_SheetData ? */ | ||||
| 	if((mtch=data.match(/<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/m))) mtch[1].split(/<\/(?:\w+:)?row>/).forEach(function(x) { | ||||
| 		if(x === "" || x.trim() === "") return; | ||||
| 	mtch=data.match(/<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/m); | ||||
| 	if(mtch) for(var marr = mtch[1].split(/<\/(?:\w+:)?row>/), mt = 0; mt != marr.length; ++mt) { | ||||
| 		x = marr[mt]; | ||||
| 		if(x === "" || x.trim() === "") continue; | ||||
| 
 | ||||
| 		/* 18.3.1.73 row CT_Row */ | ||||
| 		var row = parsexmltag(x.match(/<(?:\w+:)?row[^>]*>/)[0]); | ||||
| 		if(opts.sheetRows && opts.sheetRows < +row.r) return; | ||||
| 		if(opts.sheetRows && opts.sheetRows < +row.r) continue; | ||||
| 		if(refguess.s.r > row.r - 1) refguess.s.r = row.r - 1; | ||||
| 		if(refguess.e.r < row.r - 1) refguess.e.r = row.r - 1; | ||||
| 		/* 18.3.1.4 c CT_Cell */ | ||||
| 		var cells = x.substr(x.indexOf('>')+1).split(/<(?:\w+:)?c /); | ||||
| 		cells.forEach(function(c, idx) { if(c === "" || c.trim() === "") return; | ||||
| 			var cref = c.match(/r=["']([^"']*)["']/); | ||||
| 		for(var ix = 0, c=cells[0]; ix != cells.length; ++ix,c=cells[ix]) { | ||||
| 			if(c === "" || c.trim() === "") continue; | ||||
| 			var cref = c.match(/r=["']([^"']*)["']/), idx = ix; | ||||
| 			c = "<c " + c; | ||||
| 			if(cref && cref.length == 2) idx = decode_cell(cref[1]).c; | ||||
| 			var cell = parsexmltag((c.match(/<c[^>]*>/)||[c])[0]); delete cell[0]; | ||||
| 			var d = c.substr(c.indexOf('>')+1); | ||||
| 			var p = {}; | ||||
| 			q.forEach(function(f){var x=d.match(matchtag(f));if(x)p[f]=unescapexml(x[1]);}); | ||||
| 
 | ||||
| 			var x=d.match(match_v);if(x)p.v=unescapexml(x[1]); | ||||
| 			if(opts.cellFormula) {x=d.match(match_f);if(x)p.f=unescapexml(x[1]);} | ||||
| 
 | ||||
| 			/* SCHEMA IS ACTUALLY INCORRECT HERE.  IF A CELL HAS NO T, EMIT "" */ | ||||
| 			if(cell.t === undefined && p.v === undefined) { | ||||
| 				if(!opts.sheetStubs) return; | ||||
| 				if(!opts.sheetStubs) continue; | ||||
| 				p.t = "str"; p.v = undefined; | ||||
| 			} | ||||
| 			else p.t = (cell.t ? cell.t : "n"); // default is "n" in schema
 | ||||
| @ -93,8 +99,8 @@ function parse_ws_xml(data, opts, rels) { | ||||
| 				} | ||||
| 			} catch(e) { if(opts.WTF) throw e; } | ||||
| 			s[cell.r] = p; | ||||
| 		}); | ||||
| 	}); | ||||
| 		}; | ||||
| 	} | ||||
| 
 | ||||
| 	/* 18.3.1.48 hyperlinks CT_Hyperlinks */ | ||||
| 	if(data.match(/<\/hyperlinks>/)) data.match(/<hyperlink[^>]*\/>/g).forEach(function(h) { | ||||
|  | ||||
| @ -136,7 +136,7 @@ var write_wb_xml = function(wb, opts) { | ||||
| 	o.push("<sheets>"); | ||||
| 	var i = 1; | ||||
| 	wb.SheetNames.forEach(function(s) { | ||||
| 		o.push(writextag('sheet',null,{name:s, sheetId:String(i), "r:id":"rId"+i})); | ||||
| 		o.push(writextag('sheet',null,{name:s.substr(0,31), sheetId:String(i), "r:id":"rId"+i})); | ||||
| 		++i; | ||||
| 	}); | ||||
| 	o.push("</sheets>"); | ||||
|  | ||||
| @ -12,7 +12,7 @@ var write_BrtBundleSh = function(data, o) { | ||||
| 	o.write_shift(4, data.hsState); | ||||
| 	o.write_shift(4, data.iTabID); | ||||
| 	write_RelID(data.strRelID, o); | ||||
| 	write_XLWideString(data.name, o); | ||||
| 	write_XLWideString(data.name.substr(0,31), o); | ||||
| 	return o; | ||||
| }; | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										4
									
								
								dist/xlsx.core.min.js
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										4
									
								
								dist/xlsx.core.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.core.min.map
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.core.min.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										4
									
								
								dist/xlsx.full.min.js
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										4
									
								
								dist/xlsx.full.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.full.min.map
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.full.min.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										31
									
								
								dist/xlsx.js
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										31
									
								
								dist/xlsx.js
									
									
									
									
										vendored
									
									
								
							| @ -677,7 +677,6 @@ var rencstr = "&<>'\"".split(""); | ||||
| function unescapexml(text){ | ||||
| 	var s = text + ''; | ||||
| 	s = s.replace(/"/g, '"').replace(/'/g, "'").replace(/>/g, ">").replace(/</g, "<").replace(/&/g, "&"); | ||||
| 	//for(var y in encodings) s = s.replace(new RegExp(y,'g'), encodings[y]);
 | ||||
| 	return s.replace(/_x([0-9a-fA-F]*)_/g,function(m,c) {return _chr(parseInt(c,16));}); | ||||
| } | ||||
| function escapexml(text){ | ||||
| @ -2506,31 +2505,37 @@ function parse_ws_xml(data, opts, rels) { | ||||
| 	} | ||||
| 
 | ||||
| 	var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} }; | ||||
| 	var q = (opts.cellFormula ? ["v","f"] : ["v"]); | ||||
| 	var sidx = 0; | ||||
| 
 | ||||
| 	var match_v = matchtag("v"), match_f = matchtag("f"); | ||||
| 	/* 18.3.1.80 sheetData CT_SheetData ? */ | ||||
| 	if((mtch=data.match(/<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/m))) mtch[1].split(/<\/(?:\w+:)?row>/).forEach(function(x) { | ||||
| 		if(x === "" || x.trim() === "") return; | ||||
| 	mtch=data.match(/<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/m); | ||||
| 	if(mtch) for(var marr = mtch[1].split(/<\/(?:\w+:)?row>/), mt = 0; mt != marr.length; ++mt) { | ||||
| 		x = marr[mt]; | ||||
| 		if(x === "" || x.trim() === "") continue; | ||||
| 
 | ||||
| 		/* 18.3.1.73 row CT_Row */ | ||||
| 		var row = parsexmltag(x.match(/<(?:\w+:)?row[^>]*>/)[0]); | ||||
| 		if(opts.sheetRows && opts.sheetRows < +row.r) return; | ||||
| 		if(opts.sheetRows && opts.sheetRows < +row.r) continue; | ||||
| 		if(refguess.s.r > row.r - 1) refguess.s.r = row.r - 1; | ||||
| 		if(refguess.e.r < row.r - 1) refguess.e.r = row.r - 1; | ||||
| 		/* 18.3.1.4 c CT_Cell */ | ||||
| 		var cells = x.substr(x.indexOf('>')+1).split(/<(?:\w+:)?c /); | ||||
| 		cells.forEach(function(c, idx) { if(c === "" || c.trim() === "") return; | ||||
| 			var cref = c.match(/r=["']([^"']*)["']/); | ||||
| 		for(var ix = 0, c=cells[0]; ix != cells.length; ++ix,c=cells[ix]) { | ||||
| 			if(c === "" || c.trim() === "") continue; | ||||
| 			var cref = c.match(/r=["']([^"']*)["']/), idx = ix; | ||||
| 			c = "<c " + c; | ||||
| 			if(cref && cref.length == 2) idx = decode_cell(cref[1]).c; | ||||
| 			var cell = parsexmltag((c.match(/<c[^>]*>/)||[c])[0]); delete cell[0]; | ||||
| 			var d = c.substr(c.indexOf('>')+1); | ||||
| 			var p = {}; | ||||
| 			q.forEach(function(f){var x=d.match(matchtag(f));if(x)p[f]=unescapexml(x[1]);}); | ||||
| 
 | ||||
| 			var x=d.match(match_v);if(x)p.v=unescapexml(x[1]); | ||||
| 			if(opts.cellFormula) {x=d.match(match_f);if(x)p.f=unescapexml(x[1]);} | ||||
| 
 | ||||
| 			/* SCHEMA IS ACTUALLY INCORRECT HERE.  IF A CELL HAS NO T, EMIT "" */ | ||||
| 			if(cell.t === undefined && p.v === undefined) { | ||||
| 				if(!opts.sheetStubs) return; | ||||
| 				if(!opts.sheetStubs) continue; | ||||
| 				p.t = "str"; p.v = undefined; | ||||
| 			} | ||||
| 			else p.t = (cell.t ? cell.t : "n"); // default is "n" in schema
 | ||||
| @ -2581,8 +2586,8 @@ function parse_ws_xml(data, opts, rels) { | ||||
| 				} | ||||
| 			} catch(e) { if(opts.WTF) throw e; } | ||||
| 			s[cell.r] = p; | ||||
| 		}); | ||||
| 	}); | ||||
| 		}; | ||||
| 	} | ||||
| 
 | ||||
| 	/* 18.3.1.48 hyperlinks CT_Hyperlinks */ | ||||
| 	if(data.match(/<\/hyperlinks>/)) data.match(/<hyperlink[^>]*\/>/g).forEach(function(h) { | ||||
| @ -3283,7 +3288,7 @@ var write_wb_xml = function(wb, opts) { | ||||
| 	o.push("<sheets>"); | ||||
| 	var i = 1; | ||||
| 	wb.SheetNames.forEach(function(s) { | ||||
| 		o.push(writextag('sheet',null,{name:s, sheetId:String(i), "r:id":"rId"+i})); | ||||
| 		o.push(writextag('sheet',null,{name:s.substr(0,31), sheetId:String(i), "r:id":"rId"+i})); | ||||
| 		++i; | ||||
| 	}); | ||||
| 	o.push("</sheets>"); | ||||
| @ -3304,7 +3309,7 @@ var write_BrtBundleSh = function(data, o) { | ||||
| 	o.write_shift(4, data.hsState); | ||||
| 	o.write_shift(4, data.iTabID); | ||||
| 	write_RelID(data.strRelID, o); | ||||
| 	write_XLWideString(data.name, o); | ||||
| 	write_XLWideString(data.name.substr(0,31), o); | ||||
| 	return o; | ||||
| }; | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										2
									
								
								dist/xlsx.min.js
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.min.map
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.min.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										4
									
								
								test.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										4
									
								
								test.js
									
									
									
									
									
								
							| @ -639,7 +639,7 @@ describe('invalid files', function() { | ||||
| 		].forEach(function(w) { it('should fail on ' + w[0], function() { | ||||
| 			assert.throws(function() { X.readFile(dir + w[1]); }); | ||||
| 			assert.throws(function() { X.read(fs.readFileSync(dir+w[1], 'base64'), {type:'base64'}); }); | ||||
|     }); }); | ||||
| 		}); }); | ||||
| 	}); | ||||
| 	describe('write', function() { | ||||
| 		it('should pass', function() { X.write(X.readFile(paths.fst1), {type:'binary'}); }); | ||||
| @ -680,7 +680,7 @@ function sheet_from_array_of_arrays(data, opts) { | ||||
| 		for(var C = 0; C != data[R].length; ++C) { | ||||
| 			if(range.s.r > R) range.s.r = R; | ||||
| 			if(range.s.c > C) range.s.c = C; | ||||
| 				if(range.e.r < R) range.e.r = R; | ||||
| 			if(range.e.r < R) range.e.r = R; | ||||
| 			if(range.e.c < C) range.e.c = C; | ||||
| 			var cell = {v: data[R][C] }; | ||||
| 			if(cell.v == null) continue; | ||||
|  | ||||
							
								
								
									
										31
									
								
								xlsx.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										31
									
								
								xlsx.js
									
									
									
									
									
								
							| @ -677,7 +677,6 @@ var rencstr = "&<>'\"".split(""); | ||||
| function unescapexml(text){ | ||||
| 	var s = text + ''; | ||||
| 	s = s.replace(/"/g, '"').replace(/'/g, "'").replace(/>/g, ">").replace(/</g, "<").replace(/&/g, "&"); | ||||
| 	//for(var y in encodings) s = s.replace(new RegExp(y,'g'), encodings[y]);
 | ||||
| 	return s.replace(/_x([0-9a-fA-F]*)_/g,function(m,c) {return _chr(parseInt(c,16));}); | ||||
| } | ||||
| function escapexml(text){ | ||||
| @ -2506,31 +2505,37 @@ function parse_ws_xml(data, opts, rels) { | ||||
| 	} | ||||
| 
 | ||||
| 	var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} }; | ||||
| 	var q = (opts.cellFormula ? ["v","f"] : ["v"]); | ||||
| 	var sidx = 0; | ||||
| 
 | ||||
| 	var match_v = matchtag("v"), match_f = matchtag("f"); | ||||
| 	/* 18.3.1.80 sheetData CT_SheetData ? */ | ||||
| 	if((mtch=data.match(/<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/m))) mtch[1].split(/<\/(?:\w+:)?row>/).forEach(function(x) { | ||||
| 		if(x === "" || x.trim() === "") return; | ||||
| 	mtch=data.match(/<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/m); | ||||
| 	if(mtch) for(var marr = mtch[1].split(/<\/(?:\w+:)?row>/), mt = 0; mt != marr.length; ++mt) { | ||||
| 		x = marr[mt]; | ||||
| 		if(x === "" || x.trim() === "") continue; | ||||
| 
 | ||||
| 		/* 18.3.1.73 row CT_Row */ | ||||
| 		var row = parsexmltag(x.match(/<(?:\w+:)?row[^>]*>/)[0]); | ||||
| 		if(opts.sheetRows && opts.sheetRows < +row.r) return; | ||||
| 		if(opts.sheetRows && opts.sheetRows < +row.r) continue; | ||||
| 		if(refguess.s.r > row.r - 1) refguess.s.r = row.r - 1; | ||||
| 		if(refguess.e.r < row.r - 1) refguess.e.r = row.r - 1; | ||||
| 		/* 18.3.1.4 c CT_Cell */ | ||||
| 		var cells = x.substr(x.indexOf('>')+1).split(/<(?:\w+:)?c /); | ||||
| 		cells.forEach(function(c, idx) { if(c === "" || c.trim() === "") return; | ||||
| 			var cref = c.match(/r=["']([^"']*)["']/); | ||||
| 		for(var ix = 0, c=cells[0]; ix != cells.length; ++ix,c=cells[ix]) { | ||||
| 			if(c === "" || c.trim() === "") continue; | ||||
| 			var cref = c.match(/r=["']([^"']*)["']/), idx = ix; | ||||
| 			c = "<c " + c; | ||||
| 			if(cref && cref.length == 2) idx = decode_cell(cref[1]).c; | ||||
| 			var cell = parsexmltag((c.match(/<c[^>]*>/)||[c])[0]); delete cell[0]; | ||||
| 			var d = c.substr(c.indexOf('>')+1); | ||||
| 			var p = {}; | ||||
| 			q.forEach(function(f){var x=d.match(matchtag(f));if(x)p[f]=unescapexml(x[1]);}); | ||||
| 
 | ||||
| 			var x=d.match(match_v);if(x)p.v=unescapexml(x[1]); | ||||
| 			if(opts.cellFormula) {x=d.match(match_f);if(x)p.f=unescapexml(x[1]);} | ||||
| 
 | ||||
| 			/* SCHEMA IS ACTUALLY INCORRECT HERE.  IF A CELL HAS NO T, EMIT "" */ | ||||
| 			if(cell.t === undefined && p.v === undefined) { | ||||
| 				if(!opts.sheetStubs) return; | ||||
| 				if(!opts.sheetStubs) continue; | ||||
| 				p.t = "str"; p.v = undefined; | ||||
| 			} | ||||
| 			else p.t = (cell.t ? cell.t : "n"); // default is "n" in schema
 | ||||
| @ -2581,8 +2586,8 @@ function parse_ws_xml(data, opts, rels) { | ||||
| 				} | ||||
| 			} catch(e) { if(opts.WTF) throw e; } | ||||
| 			s[cell.r] = p; | ||||
| 		}); | ||||
| 	}); | ||||
| 		}; | ||||
| 	} | ||||
| 
 | ||||
| 	/* 18.3.1.48 hyperlinks CT_Hyperlinks */ | ||||
| 	if(data.match(/<\/hyperlinks>/)) data.match(/<hyperlink[^>]*\/>/g).forEach(function(h) { | ||||
| @ -3283,7 +3288,7 @@ var write_wb_xml = function(wb, opts) { | ||||
| 	o.push("<sheets>"); | ||||
| 	var i = 1; | ||||
| 	wb.SheetNames.forEach(function(s) { | ||||
| 		o.push(writextag('sheet',null,{name:s, sheetId:String(i), "r:id":"rId"+i})); | ||||
| 		o.push(writextag('sheet',null,{name:s.substr(0,31), sheetId:String(i), "r:id":"rId"+i})); | ||||
| 		++i; | ||||
| 	}); | ||||
| 	o.push("</sheets>"); | ||||
| @ -3304,7 +3309,7 @@ var write_BrtBundleSh = function(data, o) { | ||||
| 	o.write_shift(4, data.hsState); | ||||
| 	o.write_shift(4, data.iTabID); | ||||
| 	write_RelID(data.strRelID, o); | ||||
| 	write_XLWideString(data.name, o); | ||||
| 	write_XLWideString(data.name.substr(0,31), o); | ||||
| 	return o; | ||||
| }; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user