Skip to content
Snippets Groups Projects
Commit 7bbd82cb authored by srosse's avatar srosse
Browse files

OO-464: check if the file has a high probability to be a versions file, catch...

OO-464: check if the file has a high probability to be a versions file, catch the error if it's not case
parent 2f19e288
No related branches found
No related tags found
No related merge requests found
...@@ -28,9 +28,12 @@ import java.util.Date; ...@@ -28,9 +28,12 @@ import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Scanner;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.regex.Pattern;
import org.apache.commons.io.IOUtils;
import org.olat.core.commons.modules.bc.FolderConfig; import org.olat.core.commons.modules.bc.FolderConfig;
import org.olat.core.commons.modules.bc.meta.MetaInfo; import org.olat.core.commons.modules.bc.meta.MetaInfo;
import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged; import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged;
...@@ -74,6 +77,7 @@ public class VersionsFileManager extends VersionsManager implements Initializabl ...@@ -74,6 +77,7 @@ public class VersionsFileManager extends VersionsManager implements Initializabl
private static final OLog log = Tracing.createLoggerFor(VersionsFileManager.class); private static final OLog log = Tracing.createLoggerFor(VersionsFileManager.class);
private static final Versions NOT_VERSIONED = new NotVersioned(); private static final Versions NOT_VERSIONED = new NotVersioned();
private static final Pattern TAG_PATTERN = Pattern.compile("\\s*[<>]\\s*");
private static XStream mystream; private static XStream mystream;
...@@ -118,11 +122,14 @@ public class VersionsFileManager extends VersionsManager implements Initializabl ...@@ -118,11 +122,14 @@ public class VersionsFileManager extends VersionsManager implements Initializabl
List<VFSItem> versionItems = versionContainer.getItems(new VFSItemSuffixFilter(new String[] { "xml" })); List<VFSItem> versionItems = versionContainer.getItems(new VFSItemSuffixFilter(new String[] { "xml" }));
for (VFSItem versionItem : versionItems) { for (VFSItem versionItem : versionItems) {
if (versionItem instanceof VFSLeaf && !currentNames.contains(versionItem.getName())) { String name = versionItem.getName();
if (versionItem instanceof VFSLeaf && !currentNames.contains(name) && isVersionsXmlFile((VFSLeaf)versionItem)) {
Versions versions = readVersions(null, (VFSLeaf) versionItem); Versions versions = readVersions(null, (VFSLeaf) versionItem);
List<VFSRevision> revisions = versions.getRevisions(); if(versions != null) {
if (!revisions.isEmpty()) { List<VFSRevision> revisions = versions.getRevisions();
deletedRevisions.add(versions); if (!revisions.isEmpty()) {
deletedRevisions.add(versions);
}
} }
} }
} }
...@@ -141,23 +148,47 @@ public class VersionsFileManager extends VersionsManager implements Initializabl ...@@ -141,23 +148,47 @@ public class VersionsFileManager extends VersionsManager implements Initializabl
} }
return readVersions(leaf, fVersions); return readVersions(leaf, fVersions);
} }
private boolean isVersionsXmlFile(VFSLeaf fVersions) {
InputStream in = fVersions.getInputStream();
Scanner scanner = new Scanner(in);
scanner.useDelimiter(TAG_PATTERN);
boolean foundVersionsTag = false;
while (scanner.hasNext()) {
String tag = scanner.next();
if("versions".equals(tag)) {
foundVersionsTag = true;
break;
}
}
scanner.close();
IOUtils.closeQuietly(in);
return foundVersionsTag;
}
private Versions readVersions(VFSLeaf leaf, VFSLeaf fVersions) { private Versions readVersions(VFSLeaf leaf, VFSLeaf fVersions) {
if (fVersions == null) { return new NotVersioned(); } if (fVersions == null) { return new NotVersioned(); }
VFSContainer fVersionContainer = fVersions.getParentContainer(); try {
VersionsFileImpl versions = (VersionsFileImpl) XStreamHelper.readObject(mystream, fVersions); VFSContainer fVersionContainer = fVersions.getParentContainer();
versions.setVersionFile(fVersions); VersionsFileImpl versions = (VersionsFileImpl) XStreamHelper.readObject(mystream, fVersions);
versions.setCurrentVersion((Versionable) leaf); versions.setVersionFile(fVersions);
if (versions.getRevisionNr() == null || versions.getRevisionNr().length() == 0) { versions.setCurrentVersion((Versionable) leaf);
versions.setRevisionNr(getNextRevisionNr(versions)); if (versions.getRevisionNr() == null || versions.getRevisionNr().length() == 0) {
} versions.setRevisionNr(getNextRevisionNr(versions));
}
for (VFSRevision revision : versions.getRevisions()) { for (VFSRevision revision : versions.getRevisions()) {
RevisionFileImpl revisionImpl = (RevisionFileImpl) revision; RevisionFileImpl revisionImpl = (RevisionFileImpl) revision;
revisionImpl.setContainer(fVersionContainer); revisionImpl.setContainer(fVersionContainer);
}
return versions;
} catch (Exception e) {
log.warn("This file is not a versions XML file: " + fVersions, e);
return null;
} }
return versions;
} }
@Override @Override
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment