How to decode bplist?
Created by: ipfans
I'm trying to write a universal bplist decode for windows by go-list.
But It seems that it doesn't work:
package main
import (
"github.com/DHowett/go-plist"
"os"
"fmt"
"io/ioutil"
"bytes"
)
func main() {
if len(os.Args) != 2 {
fmt.Println("decoder.exe [Info.plist]")
return
}
filename := os.Args[1]
filebuf,err := ioutil.ReadFile(filename)
if err != nil{
fmt.Println(err)
return
}
var bval interface{}
reader := bytes.NewReader(filebuf)
decoder := plist.NewDecoder(reader)
decoder.Decode(bval)
fmt.Println(bval)
}
bval will be nil.
Should I know the plist file content?
Such as
package main
import (
"github.com/DHowett/go-plist"
"os"
"fmt"
"io/ioutil"
"bytes"
)
func main() {
if len(os.Args) != 2 {
fmt.Println("decoder.exe [Info.plist]")
return
}
filename := os.Args[1]
filebuf,err := ioutil.ReadFile(filename)
if err != nil{
fmt.Println(err)
return
}
type sparseBundleHeader struct {
CFBundleName string `plist:"CFBundleName"`
CFBundleExecuteable string `plist:"CFBundleExecuteable"`
}
var bval sparseBundleHeader
reader := bytes.NewReader(filebuf)
decoder := plist.NewDecoder(reader)
decoder.Decode(bval)
fmt.Println(bval)
}
will crash:
panic: reflect: reflect.Value.SetString using unaddressable value [recovered]
panic: interface conversion: string is not error: missing method Error