Skip to content
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

UnrecognizedPropertyException: Unrecognized field "Item" when using JacksonDatabase or SimpleDatabase #70

Closed
lordgreg opened this issue Nov 6, 2024 · 21 comments

Comments

@lordgreg
Copy link

lordgreg commented Nov 6, 2024

We have a kdbx encrypted with password, using KDBX db v2.x

ls foobar.kdbx
 foobar.kdbx
❯ file foobar.kdbx
foobar.kdbx: Keepass password database 2.x KDBX

Opening the file with SimpleDatabase:

Exception in thread "main" java.lang.IllegalStateException: org.simpleframework.xml.core.ElementException: Element 'Item' does not have a match in class org.linguafranca.pwdb.kdbx.simple.model.KeePassFile$CustomData at line 35
	at org.linguafranca.pwdb.kdbx.simple.SimpleSerializableDatabase.load(SimpleSerializableDatabase.java:80)
	at org.linguafranca.pwdb.kdbx.simple.SimpleSerializableDatabase.load(SimpleSerializableDatabase.java:41)
	at org.linguafranca.pwdb.kdbx.KdbxStreamFormat.load(KdbxStreamFormat.java:65)
	at org.linguafranca.pwdb.kdbx.simple.SimpleDatabase.load(SimpleDatabase.java:91)
	at FOO.keepass2helm.Example.main(Example.kt:22)
	at FOO.keepass2helm.ExampleKt.main(Example.kt:77)
	Suppressed: org.bouncycastle.crypto.io.InvalidCipherTextIOException: Error finalising cipher
		at org.bouncycastle.crypto.io.CipherInputStream.finaliseCipher(Unknown Source)
		at org.bouncycastle.crypto.io.CipherInputStream.close(Unknown Source)
		at java.base/java.util.zip.InflaterInputStream.close(InflaterInputStream.java:231)
		at java.base/java.util.zip.GZIPInputStream.close(GZIPInputStream.java:136)
		at org.linguafranca.pwdb.kdbx.KdbxStreamFormat.load(KdbxStreamFormat.java:76)
		... 3 more
	Caused by: org.bouncycastle.crypto.InvalidCipherTextException: pad block corrupted
		at org.bouncycastle.crypto.paddings.PKCS7Padding.padCount(Unknown Source)
		at org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher.doFinal(Unknown Source)
		... 8 more
Caused by: org.simpleframework.xml.core.ElementException: Element 'Item' does not have a match in class org.linguafranca.pwdb.kdbx.simple.model.KeePassFile$CustomData at line 35
	at org.simpleframework.xml.core.Composite.readElement(Composite.java:527)
	at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
	at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
	at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
	at org.simpleframework.xml.core.Composite.read(Composite.java:201)
	at org.simpleframework.xml.core.Composite.read(Composite.java:148)
	at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
	at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
	at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
	at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
	at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
	at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
	at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
	at org.simpleframework.xml.core.Composite.read(Composite.java:201)
	at org.simpleframework.xml.core.Composite.read(Composite.java:148)
	at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
	at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
	at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
	at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
	at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
	at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
	at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
	at org.simpleframework.xml.core.Composite.read(Composite.java:201)
	at org.simpleframework.xml.core.Composite.read(Composite.java:148)
	at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
	at org.simpleframework.xml.core.Persister.read(Persister.java:625)
	at org.simpleframework.xml.core.Persister.read(Persister.java:606)
	at org.simpleframework.xml.core.Persister.read(Persister.java:584)
	at org.simpleframework.xml.core.Persister.read(Persister.java:543)
	at org.simpleframework.xml.core.Persister.read(Persister.java:444)
	at org.linguafranca.pwdb.kdbx.simple.SimpleSerializableDatabase.load(SimpleSerializableDatabase.java:75)
	... 5 more

Opening with JacksonDatabase:

Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Item" (class org.linguafranca.pwdb.kdbx.jackson.model.KeePassFile$CustomData), not marked as ignorable (one known property: "any"])
 at [Source: (GZIPInputStream); line: 36, column: 10] (through reference chain: org.linguafranca.pwdb.kdbx.jackson.model.KeePassFile["Meta"]->org.linguafranca.pwdb.kdbx.jackson.model.KeePassFile$Meta["CustomData"]->org.linguafranca.pwdb.kdbx.jackson.model.KeePassFile$CustomData["Item"])
	at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
	at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:1153)
	at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:2241)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1793)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1771)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:316)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
	at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:310)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
	at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:310)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
	at com.fasterxml.jackson.dataformat.xml.deser.XmlDeserializationContext.readRootValue(XmlDeserializationContext.java:104)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4905)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3885)
	at org.linguafranca.pwdb.kdbx.jackson.JacksonSerializableDatabase.load(JacksonSerializableDatabase.java:72)
	at org.linguafranca.pwdb.kdbx.jackson.JacksonSerializableDatabase.load(JacksonSerializableDatabase.java:45)
	at org.linguafranca.pwdb.kdbx.KdbxStreamFormat.load(KdbxStreamFormat.java:65)
	at org.linguafranca.pwdb.kdbx.jackson.JacksonDatabase.load(JacksonDatabase.java:81)
	at FOO.keepass2helm.Example.main(Example.kt:21)
	at FOO.keepass2helm.ExampleKt.main(Example.kt:77)
	Suppressed: com.fasterxml.jackson.core.JsonParseException: pad block corrupted
 at [Source: (GZIPInputStream); line: 36, column: 10]
		at com.fasterxml.jackson.dataformat.xml.util.StaxUtil.throwAsParseException(StaxUtil.java:25)
		at com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser.close(FromXmlParser.java:538)
		at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4913)
		... 7 more
	Caused by: org.bouncycastle.crypto.InvalidCipherTextException: pad block corrupted
		at org.bouncycastle.crypto.paddings.PKCS7Padding.padCount(Unknown Source)
		at org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher.doFinal(Unknown Source)
		at org.bouncycastle.crypto.io.CipherInputStream.finaliseCipher(Unknown Source)
		at org.bouncycastle.crypto.io.CipherInputStream.close(Unknown Source)
		at java.base/java.util.zip.InflaterInputStream.close(InflaterInputStream.java:231)
		at java.base/java.util.zip.GZIPInputStream.close(GZIPInputStream.java:136)
		at com.fasterxml.aalto.in.StreamScanner._closeSource(StreamScanner.java:117)
		at com.fasterxml.aalto.in.XmlScanner.close(XmlScanner.java:351)
		at com.fasterxml.aalto.stax.StreamReaderImpl._closeScanner(StreamReaderImpl.java:1854)
		at com.fasterxml.aalto.stax.StreamReaderImpl.closeCompletely(StreamReaderImpl.java:1553)
		at com.fasterxml.jackson.dataformat.xml.deser.XmlTokenStream.closeCompletely(XmlTokenStream.java:351)
		at com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser.close(FromXmlParser.java:533)
		... 8 more

Jax and Dom work without the issue.

If I export the file as YAML and check the Object, i see there are 3:

		<CustomData>
			<Item>
				<Key>KPXC_autosaveDelayMin</Key>
				<Value>0</Value>
			</Item>
			<Item>
				<Key>KPXC_RANDOM_SLUG</Key>
				<Value>XXXXXXXXXXXXXXX</Value>
			</Item>
			<Item>
				<Key>_LAST_MODIFIED</Key>
				<Value>Wed Nov X XX:XX:XX 2024 GMT</Value>
			</Item>
		</CustomData>

This is probably something that came in with manipulating the DB with KeePassXC from here and here.

@haroon-sheikh
Copy link

We're seeing the same issue on our side when using the JacksonDatabase.

@jorabin-sense
Copy link

Hey @lordgreg

Could you please confirm that you are using version 2.2.2?

I suspect the reason for this is that CustomData has been defined as being empty in both Simple and Jackson (which copied Simple to some degree) - whereas DOM and JAXB don't care about elements they don't know about. It's interesting that this has not come up before.

Could you please supply some kind of test file containing "safe" data so I can include it in a test for the fix.

A fix will be made in 2.2.3.

NB 2.2.3 provides in-memory protection of Strings for Jackson only and is from now on the very much the preferred implementation. The others will be dropped in V3. See #60 and #62.

Thanks
Jo

@jorabin-sense
Copy link

Hi @haroon-sheikh

Likewise to the above - would you please supply a safe test file ...

Thanks
Jo

@lordgreg
Copy link
Author

lordgreg commented Nov 6, 2024

Hi @jorabin-sense ,

Yes, I am using the version 2.2.2:
image

test-KeePassJava2.kdbx.zip
Pass: KeePassJava2

File doesnt have entries, but does have the Fields:

		<CustomData>
			<Item>
				<Key>KPXC_RANDOM_SLUG</Key>
				<Value>df59b2ef51126309416ff8b48ea69dfaa9f00c8699e4d0201da51aecf663d2edb697e5d733cf8fca2613c4d697f735181ca72e6ddd4f676e0e73cef9e655ac95abbcec5b9a7fc119e2932e56cc65c8b189af96861c2362f5abbec173dc8a11e0d02bdc7346361943ec6f88a5071ed197af851de0f52c7d9bf6ac1fc8952a85973a05f59a77765348db6c7ee97c1ecba2b22fb269c9d3bb978ef492994abfee6be48a0f963e82a9073d20392bbe2181da18bdb08e49fd8d194a77f96dbadfa185dc47f0084270a3995bc7c17112a02e58fa9493236eacf40f72e274e73f0189887c9707f26caeff9dccd83530a2f95e118b209cbd4c5b04cee48b329954</Value>
			</Item>
			<Item>
				<Key>_LAST_MODIFIED</Key>
				<Value>Wed Nov 6 13:53:33 2024 GMT</Value>
			</Item>
			<Item>
				<Key>KPXC_DECRYPTION_TIME_PREFERENCE</Key>
				<Value>1000</Value>
			</Item>
		</CustomData>

This is easily reproducible if you just create a new KDBX in KeePassXC :).

@haroon-sheikh
Copy link

Thanks for looking into this @jorabin-sense, I can confirm, we're also using 2.2.2.

test.kdbx.zip
Pass: KeePassJava2

@jorabin
Copy link
Owner

jorabin commented Nov 19, 2024

Hi folks, that is now fixed, and 2.2.3-SNAPSHOT is pushed to the sonatype repo see #60 for the coordinates.

Please confirm this works for you.

Be aware that the effect of this change is to ignore custom data ... ie. if you load and save the database then the saved database won't contain the custom data.

@haroon-sheikh
Copy link

Thanks so much @jorabin - I can confirm the 2.2.3-SNAPSHOT works for us.

@lordgreg
Copy link
Author

Hi.

Sadly, we are now getting another Exception:

Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "PreviousParentGroup" (class org.linguafranca.pwdb.kdbx.jackson.JacksonEntry), not marked as ignorable (13 known properties: "ForegroundColor", "Binary", "OverrideURL", "CustomIconUUID", "Times", "AutoType", "String", "IconID", "BackgroundColor", "Tags", "UUID", "History", "icon"])
 at [Source: (GZIPInputStream); line: 6886, column: 73] (through reference chain: org.linguafranca.pwdb.kdbx.jackson.model.KeePassFile["Root"]->org.linguafranca.pwdb.kdbx.jackson.model.KeePassFile$Root["Group"]->org.linguafranca.pwdb.kdbx.jackson.JacksonGroup["Group"]->java.util.ArrayList[1]->org.linguafranca.pwdb.kdbx.jackson.JacksonGroup["Entry"]->java.util.ArrayList[31]->org.linguafranca.pwdb.kdbx.jackson.JacksonEntry["PreviousParentGroup"])
        at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
        at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:1153)
        at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:2241)
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1793)
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1771)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:316)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
        at com.fasterxml.jackson.dataformat.xml.deser.WrapperHandlingDeserializer.deserialize(WrapperHandlingDeserializer.java:122)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:361)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:246)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)
        at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:310)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
        at com.fasterxml.jackson.dataformat.xml.deser.WrapperHandlingDeserializer.deserialize(WrapperHandlingDeserializer.java:122)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:361)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:246)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)
        at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:310)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
        at com.fasterxml.jackson.dataformat.xml.deser.WrapperHandlingDeserializer.deserialize(WrapperHandlingDeserializer.java:122)
        at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:310)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
        at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:310)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
        at com.fasterxml.jackson.dataformat.xml.deser.XmlDeserializationContext.readRootValue(XmlDeserializationContext.java:104)
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4905)
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3885)
        at org.linguafranca.pwdb.kdbx.jackson.JacksonSerializableDatabase.load(JacksonSerializableDatabase.java:70)
        at org.linguafranca.pwdb.kdbx.jackson.JacksonSerializableDatabase.load(JacksonSerializableDatabase.java:41)
        at org.linguafranca.pwdb.kdbx.KdbxStreamFormat.load(KdbxStreamFormat.java:65)
        at org.linguafranca.pwdb.kdbx.jackson.JacksonDatabase.load(JacksonDatabase.java:81)
        at foo.bar.baz.keepass2helm.KeepassDb.<init>(KeepassDb.kt:16)
        at foo.bar.baz.keepass2helm.Keepass2Helm.run(Keepass2Helm.kt:61)
        at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:198)
        at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:18)
        at com.github.ajalt.clikt.core.CliktCommand.parse(CliktCommand.kt:395)
        at com.github.ajalt.clikt.core.CliktCommand.parse$default(CliktCommand.kt:392)
        at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:410)
        at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:435)
        at foo.bar.baz.keepass2helm.Keepass2HelmKt.main(Keepass2Helm.kt:81)
        Suppressed: com.fasterxml.jackson.core.JsonParseException: pad block corrupted

@jorabin
Copy link
Owner

jorabin commented Nov 21, 2024

Oh dear. The example file you sent before works OK, so this must be a different one?

@lordgreg
Copy link
Author

Oh dear. The example file you sent before works OK, so this must be a different one?

Correct. I will try to generate a new, reproducible KDBX.

Thank you for your great support!

@jorabin
Copy link
Owner

jorabin commented Nov 22, 2024

On reflection, I think the problem is that neither Simple nor Jackson support the KDBX 4.1 file format (JAXB and DOM do because they have no fixed idea of the exact format of the file beyond Groups/Entries etc.).

So, simply ignoring the content of CustomData doesn't go far enough. The changes listed in this note go further than that. I'm hoping it won't be too hard to make the adjustments, which would mean that the content of the file should remain intact on a read/write cycle ...

... as mentioned on previous occasions, I'm dropping support for Simple from release 3 on, it hasn't been maintained for a long time, so I will need to decide whether it's worth making this upgrade to the Simple implementation. Hoping that people will feel that using Jackson as a drop in replacement - if necessary - will suffice.

jorabin added a commit that referenced this issue Nov 22, 2024
jorabin added a commit that referenced this issue Nov 22, 2024
@jorabin
Copy link
Owner

jorabin commented Nov 22, 2024

I've made changes to fix this properly now, i.e. KDBX 4.1 file format now supported, hopefully. Should load and save the data intact.

@lordgreg will you please check that this version of 2.2.3-SNAPSHOT which I pushed to sonatype snapshot repo moments ago works for you.

Confirming that I didn't make any changes to Simple, other than what is mentioned above. i.e. that will remain not supporting 4.1 file format.

jorabin added a commit that referenced this issue Nov 22, 2024
* v3:
  Fixes for #70, Refactor for #71
@lordgreg
Copy link
Author

Hi there @jorabin, I've updated the code, compiled and tested. All keepass Files that have been throwing errors, are now working!

@jorabin
Copy link
Owner

jorabin commented Nov 25, 2024

That sounds like a win! Will close issue on publication of 2.2.3 which hopefully will happen shortly.

@hugoo10
Copy link

hugoo10 commented Jan 3, 2025

Hello, it seems that I have a similar issue with JacksonDatabase (I am using 2.2.3-SNAPSHOT)

Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "CustomData" (class org.linguafranca.pwdb.kdbx.jackson.JacksonEntry), not marked as ignorable (14 known properties: "ForegroundColor", "Binary", "OverrideURL", "CustomIconUUID", "Times", "AutoType", "String", "IconID", "BackgroundColor", "Tags", "UUID", "PreviousParentGroup", "History", "icon"])
 at [Source: (GZIPInputStream); line: 110, column: 12] (through reference chain: org.linguafranca.pwdb.kdbx.jackson.model.KeePassFile["Root"]->org.linguafranca.pwdb.kdbx.jackson.model.KeePassFile$Root["Group"]->org.linguafranca.pwdb.kdbx.jackson.JacksonGroup["Entry"]->java.util.ArrayList[0]->org.linguafranca.pwdb.kdbx.jackson.JacksonEntry["CustomData"])
	at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)

Here the failing database:

password: test
test.zip

@jorabin
Copy link
Owner

jorabin commented Jan 3, 2025

Hi. Thanks for this. It looks like what is happening is that CustomData is missing from the content model of Entry. FWIW it's also missing from the content model of Group. I'll have a look at fixing this shortly.

@jorabin
Copy link
Owner

jorabin commented Jan 3, 2025

I corrected the content models and created a new version of 2.2.3-SNAPSHOT pushed to the Sonatype repo. @hugoo10 will you verify that tis fix works for you , please?

thanks

@hugoo10
Copy link

hugoo10 commented Jan 3, 2025

Thank you @jorabin it is now working with my 8 years old database 😃

@jorabin
Copy link
Owner

jorabin commented Jan 3, 2025

Good to know we have caught up. Interesting (ish) that no one reported this bug before. Custom data a little used feature, possibly.

@hugoo10
Copy link

hugoo10 commented Jan 3, 2025

Yes, I use it with keepass2Android, that may be the reason

jorabin added a commit that referenced this issue Jan 5, 2025
* develop: (37 commits)
  Update logback dependency
  Adding various missing properties to Jackson implementation only, see #70
  Updating XSD to 4.1
  Further fixes for issue #70 - adding CustomData to Entry and Group
  documentation
  tweaks to viewing XML
  update CHANGELOG.md
  Adding deploy skip to test and util ref #71
  Fixes for #70
  Fixes for issue #70
  Addressing #71
  revert anonymous type / inner class for Java 8
  tweaks to property value
  Adding equals etc methods to AESKey
  Undo accidental rename of Entry#setProperty
  Some tweaks
  Clarifications of the discussion of property value protection
  Significant updates to PropertyyValue
  Explained the security technical choices in the README.
  it's going to work this time
  ...
@jorabin
Copy link
Owner

jorabin commented Jan 5, 2025

Now released to Maven as 2.2.3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants