-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Path encoding bug #60
Comments
It occurred to me that another approach to backwards compatible validation would be to only decode For example, if a bag contains the file This approach does not work for files that naturally include these three strings. For example, if a bag has a file named While not perfect, I think this approach would greatly improve validation compatibility. |
) * fixes #60 - correctly do percent encoding for version 1.0 and above * update circleCI image and save the reports to see why they are failing * drop support for java 8, and only do LTS versions * fix circleci config * fix indention * also replace %2F with / * hard code which appveyor environment to use * revert change, that doesn't change environment it names the build in appveyor * echo which java environments are available on appveyor * specify which build image to use for appveyor
I recently discovered that the BagIt 1.0 specification requires that
CR
,LF
, and%
in file paths within manifest files are percent-encoded, and that there isn't a single BagIt implementation that does this correctly. Implementations either only encodeCR
andLF
but not%
or they encode nothing.This implementation only encodes
CR
andLF
but not%
. This is problematic because it would fail to validate BagIt 1.0 bags that include file paths containing%
characters. Likewise, it would create bags that would fail BagIt 1.0 validation in the case that there are paths that naturally contain percent-encoded characters.For example, let's say a bag contains the file
data/file%0A1.txt
. This file should be written to the manifest per the spec asdata/file%250A1.txt
. However, this implementation writes it asdata/file%0A1.txt
. This means, that when this implementation validates a properly constructed 1.0 bag it will look for the filedata/file%250A1.txt
which does not exist. Similarly, if another implementation that follows the spec attempts to validate a bag produced by this implementation, it would look fordata/file\n1.txt
, which does not exist.It would seem desirable to me to move the ecosystem in the direction of properly implementing the 1.0 specification, while at the same acknowledging that there are a large number of 1.0 bags in existence that may then become invalid.
As such, it may be prudent to, when validating bags, fall back on a series of tests. You may want to first attempt to validate per the spec, and then, if a file cannot be found, attempt to locate it by either only decoding the
CR
andLF
or leaving the path unchanged, ideally validating all of the files using the same method.I have not examined
fetch.txt
implementations, but the same encoding requirements exist for paths in that file as well. This is potentially a thornier problem to address in a backward compatible way as it is unclear if the pathdata/file%250A1.txt
is supposed to createdata/file%250A1.txt
(incorrect) ordata/file%0A1.txt
(correct).Finally, I created a related ticket against the spec discussing this encoding problem, in particular how it breaks checksum utility compatibility.
The text was updated successfully, but these errors were encountered: