Loading a database may fail when accessed by multiple threads. The reason seems to be that in HashedBlockInputStream, there is unsynchronized access to the static field md5. BTW: This is misnamed since it computes SHA256, not MD5.
Stacktrace:
MD5 check failed while reading HashBlock
at org.linguafranca.pwdb.hashedblock.HashedBlockInputStream.load(HashedBlockInputStream.java:170)
at org.linguafranca.pwdb.hashedblock.HashedBlockInputStream.get(HashedBlockInputStream.java:122)
at org.linguafranca.pwdb.hashedblock.HashedBlockInputStream.read(HashedBlockInputStream.java:89)
at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:238)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:117)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:122)
at org.apache.xerces.impl.XMLEntityManager$RewindableInputStream.readAndBuffer(XMLEntityManager.java:3116)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:1018)
at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:144)
at org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:832)
at org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:798)
at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:108)
at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1198)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:564)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:258)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:229)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:136)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:183)
at org.linguafranca.pwdb.kdbx.jaxb.JaxbSerializableDatabase.load(JaxbSerializableDatabase.java:77)
at org.linguafranca.pwdb.kdbx.jaxb.JaxbSerializableDatabase.load(JaxbSerializableDatabase.java:41)
at org.linguafranca.pwdb.kdbx.stream_3_1.KdbxStreamFormat.load(KdbxStreamFormat.java:39)
at org.linguafranca.pwdb.kdbx.jaxb.JaxbDatabase.load(JaxbDatabase.java:71)
at org.linguafranca.pwdb.kdbx.jaxb.JaxbDatabase.load(JaxbDatabase.java:64)
Loading a database may fail when accessed by multiple threads. The reason seems to be that in
HashedBlockInputStream
, there is unsynchronized access to the static fieldmd5
. BTW: This is misnamed since it computes SHA256, not MD5.Stacktrace: