Inserting Container with files and non-ascii characters in entities may lead to unexpected server error
Summary
Inserting a container with a) file entities and b) entities with umlauts in names may lead to an unexpected server error.
Expected Behavior
container.insert()
should just work.
Actual Behavior
Leads to an unexpected server error:
linkahead | org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly
linkahead | at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:1005)
linkahead | at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:903)
linkahead | at java.base/java.io.InputStream.read(InputStream.java:205)
linkahead | at org.caosdb.server.FileSystem.upload(FileSystem.java:186)
linkahead | at org.caosdb.server.resource.transaction.EntityResource.parseMultipartEntity(EntityResource.java:163)
linkahead | at org.caosdb.server.resource.transaction.EntityResource.httpPostInChildClass(EntityResource.java:108)
linkahead | at org.caosdb.server.resource.AbstractCaosDBServerResource.httpPost(AbstractCaosDBServerResource.java:256)
linkahead | at jdk.internal.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
linkahead | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
linkahead | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
linkahead | at org.restlet.resource.ServerResource.doHandle(ServerResource.java:508)
linkahead | at org.restlet.resource.ServerResource.post(ServerResource.java:1341)
linkahead | at org.restlet.resource.ServerResource.doHandle(ServerResource.java:606)
linkahead | at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:662)
linkahead | at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:348)
linkahead | at org.restlet.resource.ServerResource.handle(ServerResource.java:1020)
linkahead | at org.restlet.resource.Finder.handle(Finder.java:236)
Steps to Reproduce the Problem
Example code:
file1 = db.File(file="/dev/null", path="/1").add_parent("Äh")
file2 = db.File(file="/dev/null", path="/2").add_parent("Äh")
rec1 = db.Record().add_parent("Äh").add_property(name="Äh").add_property("Oops. Ö")
db.Container().extend([file1, file2, rec1]).insert(unique=False)
Specifications
- Version: Current main branch of server, dev branch of everything else.
- Platform: Which operating system, which other relevant software versions?
Possible fixes
Maybe: fix MultipartYielder
in encode.py
?
Edited by Quazgar