diff --git a/transform/absurl.go b/transform/absurl.go index 80716f1b7..8bdd36515 100644 --- a/transform/absurl.go +++ b/transform/absurl.go @@ -23,15 +23,22 @@ func AbsURL(absURL string) (trs []link, err error) { hrefsq = []byte(" href='" + base + "/") ) trs = append(trs, func(content []byte) []byte { - content = bytes.Replace(content, []byte(" src=\"/"), srcdq, -1) - content = bytes.Replace(content, []byte(" src='/"), srcsq, -1) - content = bytes.Replace(content, []byte(" href=\"/"), hrefdq, -1) - content = bytes.Replace(content, []byte(" href='/"), hrefsq, -1) + content = guardReplace(content, []byte(" src=\"//"), []byte(" src=\"/"), srcdq) + content = guardReplace(content, []byte(" src='//"), []byte(" src='/"), srcsq) + content = guardReplace(content, []byte(" href=\"//"), []byte(" href=\"/"), hrefdq) + content = guardReplace(content, []byte(" href='//"), []byte(" href='/"), hrefsq) return content }) return } +func guardReplace(content, guard, match, replace []byte) []byte { + if !bytes.Contains(content, guard) { + content = bytes.Replace(content, match, replace, -1) + } + return content +} + type elattr struct { tag, attr string } diff --git a/transform/posttrans_test.go b/transform/posttrans_test.go index d7d06fee7..297b4f66e 100644 --- a/transform/posttrans_test.go +++ b/transform/posttrans_test.go @@ -12,8 +12,7 @@ const H5_JS_CONTENT_SINGLE_QUOTE = "
content foobar. Follow up
" +const H5_JS_CONTENT_ABS_URL_SCHEMALESS = "
content foobar. Follow up
" @@ -34,6 +33,7 @@ var abs_url_tests = []test{ {H5_JS_CONTENT_DOUBLE_QUOTE, CORRECT_OUTPUT_SRC_HREF_DQ}, {H5_JS_CONTENT_SINGLE_QUOTE, CORRECT_OUTPUT_SRC_HREF_SQ}, {H5_JS_CONTENT_ABS_URL, H5_JS_CONTENT_ABS_URL}, + {H5_JS_CONTENT_ABS_URL_SCHEMALESS, H5_JS_CONTENT_ABS_URL_SCHEMALESS}, } type errorf func(string, ...interface{})