-
Notifications
You must be signed in to change notification settings - Fork 46
Open
Description
CFPropertyList::List raises an error when the following types of Property List.
1. Dictionary without surrounding { }
require 'cfpropertylist'
data = 'foo = bar;'
CFPropertyList::List.new(data: data)/path/to/CFPropertyList-3.0.7/lib/cfpropertylist/rbPlainCFPropertyList.rb:25:in `load': content after root object (CFFormatError)
from /path/to/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFPropertyList.rb:321:in `load_str'
from /path/to/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFPropertyList.rb:239:in `initialize'
from /var/folders/tm/wy8sj46s6yq4rlfgsxyvd1l80000gn/T/vdeL7YX/205:5:in `new'
from /var/folders/tm/wy8sj46s6yq4rlfgsxyvd1l80000gn/T/vdeL7YX/205:5:in `<main>'
I cannot find the specification but I think it is a valid format because of some reasons.
Details
plutilcan parse it.
$ echo 'foo = bar;' | plutil -p -
{
"foo" => "bar"
}plcan parse it.
$ echo 'foo = bar;' | pl
{
foo = bar;
}- Foundation classes can parse it.
import Foundation
try! "foo = bar;".write(toFile: "foobar.plist", atomically: false, encoding: .utf8)
print(NSDictionary(contentsOfFile: "foobar.plist")!)
// prints
// {
// foo = bar;
// }And also, .strings format, which is often used as iOS localized string file, is encoded as this kind of Property List.
Whitespaces at the end
require 'cfpropertylist'
data = "foo\n"
CFPropertyList::List.new(data: data)/path/to/CFPropertyList-3.0.7/lib/cfpropertylist/rbPlainCFPropertyList.rb:25:in `load': content after root object (CFFormatError)
from /path/to/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFPropertyList.rb:321:in `load_str'
from /path/to/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFPropertyList.rb:239:in `initialize'
from /var/folders/tm/wy8sj46s6yq4rlfgsxyvd1l80000gn/T/vdeL7YX/188:5:in `new'
from /var/folders/tm/wy8sj46s6yq4rlfgsxyvd1l80000gn/T/vdeL7YX/188:5:in `<main>'
I think it is also valid because of the following reasons.
Details
plutilcan parse it.
$ printf 'foo\n' | plutil -p -
"foo"plcan parse it.
$ printf 'foo\n' | pl
foo- Foundation classes can parse it.
import Foundation
try! "foo\n".write(toFile: "foobar.plist", atomically: false, encoding: .utf8)
print(try! NSString(contentsOfFile: "foobar.plist", encoding: String.Encoding.utf8.rawValue))
// prints fooMetadata
Metadata
Assignees
Labels
No labels