This repository was archived by the owner on Feb 17, 2025. It is now read-only.

Description
Describe the bug
Parsing plists produced by NSKeyedArchiver produces a tree of dependencies where references are marked with CF$UID pointing to the main tree. The library squashes these into integers making it impossible to distinguish references from real values.
To Reproduce
Attempt to parse the following plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>test1</key>
<dict>
<key>CF$UID</key>
<integer>123</integer>
</dict>
<key>test2</key>
<integer>321</integer>
</dict>
</plist>
As an array it will result in:

This doesn't seem like a problem until you encounter a structure like:
<dict>
<key>$class</key>
<dict>
<key>CF$UID</key>
<integer>89</integer>
</dict>
<key>accumulatedDataSize</key>
<integer>7723067</integer>
<key>allURLs</key>
<dict>
<key>CF$UID</key>
<integer>8</integer>
</dict>
</dict>
This will parse to:

As you can see it's impossible to distinguish what's is a reference and what is an integer. Obviously these are two different things.
I traced the origin of this to 2ea0483 and no further changes has been made.
Expected behavior
UID type should be decoded to a simple DTO which can have a toInteger() method.