diff options
| author | Michael Williamson <mike@zwobble.org> | 2017-01-23 20:23:03 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2017-01-23 20:23:03 +0000 |
| commit | e81f83906d26ace7c38b0b7b24e0d5f98da35172 (patch) | |
| tree | 260965d0157d61bd34310181739154e7862f16d7 /lib | |
| parent | 1e85fcd0539d71484a4b5f44e1f0ccd0f48a90ec (diff) | |
Handle base-relative URIs entirely in entry name generation
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/docx/body-reader.js | 4 | ||||
| -rw-r--r-- | lib/zipfile.js | 24 |
2 files changed, 10 insertions, 18 deletions
diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js index 175b724..e683168 100644 --- a/lib/docx/body-reader.js +++ b/lib/docx/body-reader.js @@ -5,7 +5,7 @@ var _ = require("underscore"); var documents = require("../documents"); var Result = require("../results").Result; var warning = require("../results").warning; -var joinZipPath = require("../zipfile").joinZipPath; +var uriToZipEntryName = require("../zipfile").uriToZipEntryName; function BodyReader(options) { @@ -354,7 +354,7 @@ function BodyReader(options) { } function findEmbeddedImageFile(relationshipId) { - var path = joinZipPath("word", relationships[relationshipId].target); + var path = uriToZipEntryName("word", relationships[relationshipId].target); return { path: path, read: docxFile.read.bind(docxFile, path) diff --git a/lib/zipfile.js b/lib/zipfile.js index efe519c..9542ae1 100644 --- a/lib/zipfile.js +++ b/lib/zipfile.js @@ -3,16 +3,16 @@ var JSZip = require("jszip"); var promises = require("./promises"); exports.openArrayBuffer = openArrayBuffer; -exports.joinZipPath = joinZipPath; +exports.uriToZipEntryName = uriToZipEntryName; function openArrayBuffer(arrayBuffer) { var zipFile = new JSZip(arrayBuffer); function exists(name) { - return zipFile.file(normaliseName(name)) !== null; + return zipFile.file(name) !== null; } function read(name, encoding) { - var array = zipFile.file(normaliseName(name)).asUint8Array(); + var array = zipFile.file(name).asUint8Array(); var buffer = new Buffer(array); if (encoding) { return promises.when(buffer.toString(encoding)); @@ -22,7 +22,7 @@ function openArrayBuffer(arrayBuffer) { } function write(name, contents) { - zipFile.file(normaliseName(name), contents); + zipFile.file(name, contents); } function toBuffer() { @@ -37,20 +37,12 @@ function openArrayBuffer(arrayBuffer) { }; } -function normaliseName(name) { - if (name.charAt(0) === "/") { - return name.substr(1); - } else { - return name; - } -} - -function joinZipPath(first, second) { - if (second.charAt(0) === "/") { - return second; +function uriToZipEntryName(base, uri) { + if (uri.charAt(0) === "/") { + return uri.substr(1); } else { // In general, we should check first and second for trailing and leading slashes, // but in our specific case this seems to be sufficient - return first + "/" + second; + return base + "/" + uri; } } |
