From a6f9c6f8a9b06b19c70ebf357fba768aa33f7d9b Mon Sep 17 00:00:00 2001 From: Adam Stankiewicz Date: Tue, 23 Sep 2014 14:00:45 +0200 Subject: [PATCH] Strip spaces from octal fields for old tars --- headers.js | 3 +++ test/extract.js | 19 ++++++++++++++++++- test/fixtures/index.js | 3 ++- test/fixtures/space.tar | Bin 0 -> 10240 bytes 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/space.tar diff --git a/headers.js b/headers.js index 5ea4333..42f8c6a 100644 --- a/headers.js +++ b/headers.js @@ -90,6 +90,9 @@ var encodeOct = function(val, n) { }; var decodeOct = function(val, offset) { + // Older versions of tar can prefix with spaces + while (val[offset] === 32) offset += 1; + return parseInt(val.slice(offset, clamp(indexOf(val, 32, offset, val.length), val.length, val.length)).toString(), 8); }; diff --git a/test/extract.js b/test/extract.js index 27c6310..e758b27 100644 --- a/test/extract.js +++ b/test/extract.js @@ -417,4 +417,21 @@ test('invalid-file', function(t) { }); extract.end(fs.readFileSync(fixtures.INVALID_TGZ)); -}); \ No newline at end of file +}); + +test('space prefixed', function(t) { + t.plan(5); + + var extract = tar.extract(); + + extract.on('entry', function(header, stream, callback) { + t.ok(true) + callback(); + }); + + extract.on('finish', function() { + t.ok(true); + }); + + extract.end(fs.readFileSync(fixtures.SPACE_TAR_GZ)); +}); diff --git a/test/fixtures/index.js b/test/fixtures/index.js index 59bc87b..0c4b283 100644 --- a/test/fixtures/index.js +++ b/test/fixtures/index.js @@ -7,4 +7,5 @@ exports.LONG_NAME_TAR = path.join(__dirname, 'long-name.tar'); exports.UNICODE_BSD_TAR = path.join(__dirname, 'unicode-bsd.tar'); exports.UNICODE_TAR = path.join(__dirname, 'unicode.tar'); exports.NAME_IS_100_TAR = path.join(__dirname, 'name-is-100.tar'); -exports.INVALID_TGZ = path.join(__dirname, 'invalid.tgz'); \ No newline at end of file +exports.INVALID_TGZ = path.join(__dirname, 'invalid.tgz'); +exports.SPACE_TAR_GZ = path.join(__dirname, 'space.tar'); diff --git a/test/fixtures/space.tar b/test/fixtures/space.tar new file mode 100644 index 0000000000000000000000000000000000000000..0bd7cead248ba7c059e2549c4bcc58003d17c77b GIT binary patch literal 10240 zcmeHLTW{Mo6wY&g1tAQ52qsbTZG*w6yI{itG;0B8!+>=NWQlRuNuof?wX-7seTNsx zk{idhVGQj+1&FP~bK`e-jy}1jvi8FO{`}dm-@lpt^7;nP`HG6*o#f@&Nv7SqkYCq5t-5A^unbR_`AbvOJ z*~5Iv@{E;>Amv5ufx%zeb+N*(X|>c%)`i;@c^vVJcvaB!iQRCYY0w*}9ZIhBn} zAJJQIT=9~Ybt`Xo0CwuT)N#)r&%cmz{O4&Zkhc53;zh77@{{GVr~jkzB(nYg&1f`; zp#R5{aOnE~WCeJ}5qSxfMz-BAy(kDhM9Y+`#=Z1@yZPDw)_WPBlS=S+G_4V6m-5oP zuj^`xagn@-rcbIQy{7>e3;gEwH6E#_iDxvYYsp&e)oK;2hFWhBh7tbb`qc~!i^OLo zOyM%6U?tg9YT+xMCN<2U)_iv`v@4yp%uJ5HPAY(VFV>@rz(Aq-?`F)!dX?aw%&1j~ zfcau<)W{jFT3NP=zTmv}q1_1XtZ$5L zSz@S4Fd(?OHJRaVYDc6+Iw92*_&5jB1nl#J?L;yvQ^6`#D}*h&diHlvtMcUnioB6% zP>i%M+(t`R-A|;X#XNuTjmgKkDl>Hv{FGDjlu)a8KroRqTG29t7C0tW6WwlCIib{^u2}H7@DZ67dd+VVWFA!a`8byk` zJ!;Nqi039|heKY?e)Jr_JNi64)&I?~JrxPu)Bn+UFl_nXQ1ibDya2lXKf0&~7?P&g zx=Z)4JM$EkmQppA_L+>EdmIH(Fi_2ljw6A_@&F=uNM6r!#byh>-a?lyvMko`oCL!+ zogjf<3yP%fa2hL#;Rl6a@ejd9!D`#Ph8f(koX%+9+KBpeh-6Fv@8;qm{_2Az5y3o> z6y%QtZ&r0q3UYN3R;Kw9#&zFWcPWN<>65O4@M1RMem0f&G?z#-rea0oaA90Cpjhk!%ie}%xmfj#!? literal 0 HcmV?d00001