From 00bd1f0aba4cd07b72ceadc3e2772628a54279f4 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Wed, 19 Apr 2017 17:48:42 +0900 Subject: [PATCH] fix linkHeader restrictly --- mastodon.go | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/mastodon.go b/mastodon.go index 4a20c55..b7c8824 100644 --- a/mastodon.go +++ b/mastodon.go @@ -37,19 +37,44 @@ type page struct { func linkHeader(h http.Header, rel string) []string { var links []string for _, v := range h["Link"] { - parts := strings.Split(v, ";") - for _, p := range parts { - p = strings.TrimSpace(p) - if !strings.HasPrefix(p, "rel=") { - continue + var p string + for len(v) > 0 { + i := strings.Index(v, ";") + if i < 0 { + break } + e := i + i++ + for i < len(v) { + if v[i] != ' ' { + break + } + i++ + } + p = strings.TrimSpace(v[i:]) + if !strings.HasPrefix(p, "rel=") { + break + } + i += 4 pos := strings.Index(p[4:], `,`) if pos > 0 { p = p[4 : 4+pos] + i += pos + } else { + p = p[4:] + i = len(v) - 1 } - if v := strings.Trim(p, `"`); v == rel { - links = append(links, strings.Trim(parts[0], "<>")) + if k := strings.Trim(p, `"`); k == rel { + links = append(links, strings.Trim(v[:e], "<>")) } + i++ + for i < len(v) { + if v[i] != ' ' { + break + } + i++ + } + v = v[i:] } } return links