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

Having issues with id3-go on go1.7.1 darwin/amd64 #29

Open
david4shure opened this issue Oct 27, 2016 · 0 comments
Open

Having issues with id3-go on go1.7.1 darwin/amd64 #29

david4shure opened this issue Oct 27, 2016 · 0 comments

Comments

@david4shure
Copy link

Hello there,

I used to do active development on a go 1.5.X setup on my macbook. I recently upgraded to go 1.7.1 for darwin and I am seeing runtime errors when trying to run some code that uses id3-go. The following function is fairly simple, it takes in a file extension as a string, and a path as a string, and recursively walks through the directory tree starting at the path, and returns a slice of SongFile{} representing an MP3 file.

type SongFile struct {
        RawArtist string `json:"raw_artist"`
        RawAlbum  string `json:"raw_album"`
        RawTitle  string `json:"raw_title"`
        Path      string `json:"path"`
        FileName  string `json:"filename"`
        AlbumArt  string `json"album_art"`
}

func checkExt(ext string, path string) []SongFile {
        var files []SongFile
        filepath.Walk(path, func(p string, f os.FileInfo, _ error) error {
                if !f.IsDir() {
                        r, err := regexp.MatchString(ext, f.Name())
                        if err == nil && r {
                                mp3File, err := id3.Open(p)
                                defer mp3File.Close()
                                if err == nil {
                                        // Sometimes the strings come out bad with null bytes, so I do a string replace
                                        artist := strings.Replace(mp3File.Artist(), "\u0000", "", -1)
                                        album := strings.Replace(mp3File.Album(), "\u0000", "", -1)
                                        title := strings.Replace(mp3File.Title(), "\u0000", "", -1)

                                        if artist == "" {
                                                artist = "Unknown Artist"
                                        }
                                        if album == "" {
                                                album = "Unknown Album"
                                        }
                                        if title == "" {
                                                title = "Unknown Title"
                                        }

                                        sf := SongFile{Path: p, FileName: f.Name(), RawArtist: artist, RawAlbum: album, RawTitle: title}
                                        files = append(files, sf)
                                } else {
                                        fmt.Println(err.Error())
                                        fmt.Println("! " + p + " !")
                                }
                        }
                }
                return nil
        })
        return files
}

The exact stack trace I am seeing when I call this function is as follows

panic: runtime error: cgo argument has Go pointer to Go pointer

goroutine 1 [running]:
panic(0x428d620, 0xc42027e5f0)
    /usr/local/go/src/runtime/panic.go:500 +0x1a1
github.com/djimenez/iconv-go.(*Converter).Convert(0xc420019360, 0xc42027e5a8, 0x5, 0x8, 0xc42027e5b0, 0xa, 0xa, 0x40415bb, 0x10, 0x4277ca0, ...)
    /Users/david.shure/go/src/github.com/djimenez/iconv-go/converter.go:83 +0x55c
github.com/djimenez/iconv-go.(*Converter).ConvertString(0xc420019360, 0xc4204b34b8, 0x5, 0x5, 0xc4204b34b8, 0x5, 0x4013418)
    /Users/david.shure/go/src/github.com/djimenez/iconv-go/converter.go:123 +0x184
github.com/mikkyang/id3-go/encodedbytes.(*Reader).ReadRestString(0xc4204b3528, 0xc42000cf00, 0x6, 0x0, 0x0, 0x6)
    /Users/david.shure/go/src/github.com/mikkyang/id3-go/encodedbytes/reader.go:69 +0xaa
github.com/mikkyang/id3-go/v2.ParseTextFrame(0x42daac4, 0x4, 0x42e4613, 0x22, 0x42ff9b0, 0x600000000, 0x0, 0xc42027e59a, 0x6, 0x6, ...)
    /Users/david.shure/go/src/github.com/mikkyang/id3-go/v2/frame.go:233 +0x152
github.com/mikkyang/id3-go/v2.ParseV23Frame(0x4401540, 0xc420472118, 0xc420472118, 0x4401540)
    /Users/david.shure/go/src/github.com/mikkyang/id3-go/v2/id3v23.go:150 +0x389
github.com/mikkyang/id3-go/v2.ParseTag(0x4404040, 0xc420472118, 0x2)
    /Users/david.shure/go/src/github.com/mikkyang/id3-go/v2/id3v2.go:74 +0x11b
github.com/mikkyang/id3-go.Open(0xc42011ebd0, 0x2f, 0xc42011ebf1, 0xe, 0x476e701)
    /Users/david.shure/go/src/github.com/mikkyang/id3-go/id3.go:58 +0xd0
main.checkExt.func1(0xc42011ebd0, 0x2f, 0x4406680, 0xc42025edd0, 0x0, 0x0, 0x0, 0x0)
    /Users/david.shure/stash/griffon/server/griffon.go:94 +0x152
path/filepath.walk(0xc42011ebd0, 0x2f, 0x4406680, 0xc42025edd0, 0xc4200cc8e0, 0x0, 0x0)
    /usr/local/go/src/path/filepath/path.go:351 +0x81
path/filepath.walk(0xc42030e8a0, 0x20, 0x4406680, 0xc42025ed00, 0xc4200cc8e0, 0x0, 0x0)
    /usr/local/go/src/path/filepath/path.go:376 +0x344
path/filepath.walk(0xc42030e760, 0x1e, 0x4406680, 0xc42025eb60, 0xc4200cc8e0, 0x0, 0x0)
    /usr/local/go/src/path/filepath/path.go:376 +0x344
path/filepath.walk(0xc4202a3600, 0x1c, 0x4406680, 0xc420076820, 0xc4200cc8e0, 0x0, 0x0)
    /usr/local/go/src/path/filepath/path.go:376 +0x344
path/filepath.walk(0x7fff5fbff58c, 0x13, 0x4406680, 0xc420077a00, 0xc4200cc8e0, 0x0, 0x1)
    /usr/local/go/src/path/filepath/path.go:376 +0x344
path/filepath.Walk(0x7fff5fbff58c, 0x13, 0xc4200cc8e0, 0x1c, 0x42ff9b0)
    /usr/local/go/src/path/filepath/path.go:398 +0xd5
main.checkExt(0x42dad2d, 0x5, 0x7fff5fbff58c, 0x13, 0x8, 0x42ff9b8, 0x42da786)
    /Users/david.shure/stash/griffon/server/griffon.go:121 +0xce
main.main()
    /Users/david.shure/stash/griffon/server/griffon.go:139 +0x153

After I first encountered this issue, I deleted the source code of id3-go from my $GOPATH, and re-ran go get github.com/mikkyang/id3-go but this hasn't fixed the issue. Please let me know if you need any additional information from my environment. Any information on this would be greatly appreciated. Thanks!

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

No branches or pull requests

1 participant