From 2643750ed2a84571c43ad32278de4a00d24bce46 Mon Sep 17 00:00:00 2001 From: John Scancella Date: Thu, 23 Jun 2016 13:05:28 -0400 Subject: [PATCH] refs #51 - percent encode \r and \n in manifest file names --- .../gov/loc/repository/bagit/impl/ManifestReaderImpl.java | 7 ++++++- .../gov/loc/repository/bagit/impl/ManifestWriterImpl.java | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/gov/loc/repository/bagit/impl/ManifestReaderImpl.java b/src/main/java/gov/loc/repository/bagit/impl/ManifestReaderImpl.java index 7532e7706..4e929c90f 100644 --- a/src/main/java/gov/loc/repository/bagit/impl/ManifestReaderImpl.java +++ b/src/main/java/gov/loc/repository/bagit/impl/ManifestReaderImpl.java @@ -71,7 +71,7 @@ private void setNext() } else if (filepath.indexOf('\\') != -1) { throw new UnsupportedOperationException(MessageFormat.format("This Library does not support \\ in filepaths: {0}. See README.txt.", filepath)); } - filepath = FilenameHelper.normalizePath(filepath); + filepath = decode(FilenameHelper.normalizePath(filepath)); log.trace("Filepath after normalization: " + filepath); this.next = new FilenameFixity(filepath, splitString[0]); log.debug("Read: " + this.next); @@ -87,6 +87,11 @@ private void setNext() } + //decode percent encoded \r and \n + protected String decode(String filepath){ + return filepath.replaceAll("%0A", "\n").replaceAll("%0D", "\r"); + } + public FilenameFixity next() { if (this.next == null) { diff --git a/src/main/java/gov/loc/repository/bagit/impl/ManifestWriterImpl.java b/src/main/java/gov/loc/repository/bagit/impl/ManifestWriterImpl.java index 56bf6efce..49375db7b 100755 --- a/src/main/java/gov/loc/repository/bagit/impl/ManifestWriterImpl.java +++ b/src/main/java/gov/loc/repository/bagit/impl/ManifestWriterImpl.java @@ -30,10 +30,15 @@ public ManifestWriterImpl(OutputStream out, String separator) { } public void write(String file, String fixityValue) { - this.writer.println(fixityValue + separator + file); + this.writer.println(fixityValue + separator + encode(file)); log.debug(MessageFormat.format("Wrote to manifest: Filename is {0}. Fixity is {1}.", file, fixityValue)); } + //percent encode \r and \n + protected String encode(String file){ + return file.replaceAll("\n", "%0A").replaceAll("\r", "%0D"); + } + public void write(String file, String fixityValue, String _separator) { if(_separator != null){ this.separator = _separator;