headzoo / surf

Stateful programmatic web browsing in Go.
MIT License
1.48k stars 159 forks source link

Bug in browser.Forms creates nil entries #140

Open klokare opened 6 months ago

klokare commented 6 months ago

I believe there is a subtle bug in browser.Forms. The slice is made with a length instead of a capacity. Here is the original code

// Forms returns an array of every form in the page.
func (bow *Browser) Forms() []Submittable {
    sel := bow.Find("form")
    len := sel.Length()
    if len == 0 {
        return nil
    }

    forms := make([]Submittable, len)
    sel.Each(func(_ int, s *goquery.Selection) {
        forms = append(forms, NewForm(bow, s))
    })
    return forms
}

The make line should be forms := make([]Submittable, 0, len) since we are using append to add items.