From 456ac09b6229a42e5431128ca79123d088e7b1b7 Mon Sep 17 00:00:00 2001 From: Ilya Kreymer Date: Thu, 19 Oct 2017 15:41:32 -0700 Subject: [PATCH] rewriting fixes: - wburl: escape any '#' -> '%23' (presumably unescaped by wsgi), add tests - wombat: call proxy_to_obj() for overriden property accessors --- pywb/rewrite/test/test_wburl.py | 3 +++ pywb/rewrite/wburl.py | 2 ++ pywb/static/wombat.js | 13 +++++++++---- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/pywb/rewrite/test/test_wburl.py b/pywb/rewrite/test/test_wburl.py index c8d1e5e1..7267d4ad 100644 --- a/pywb/rewrite/test/test_wburl.py +++ b/pywb/rewrite/test/test_wburl.py @@ -53,6 +53,9 @@ u""" >>> repr(WbUrl('http://example.com?example=2')) "('latest_replay', '', '', 'http://example.com?example=2', 'http://example.com?example=2')" +>>> repr(WbUrl('http://example.com/xyz##abc')) +"('latest_replay', '', '', 'http://example.com/xyz%23%23abc', 'http://example.com/xyz%23%23abc')" + # support urn: prefix >>> repr(WbUrl('urn:X-wpull:log')) "('latest_replay', '', '', 'urn:X-wpull:log', 'urn:X-wpull:log')" diff --git a/pywb/rewrite/wburl.py b/pywb/rewrite/wburl.py index 3d98fdd5..38eb5db0 100644 --- a/pywb/rewrite/wburl.py +++ b/pywb/rewrite/wburl.py @@ -148,6 +148,7 @@ class WbUrl(BaseWbUrl): if six.PY2 and isinstance(scheme_dom, six.binary_type): if scheme_dom == parts[0]: + url = url.replace('#', '%23') return url scheme_dom = scheme_dom.decode('utf-8', 'ignore') @@ -177,6 +178,7 @@ class WbUrl(BaseWbUrl): url += rest + url = url.replace('#', '%23') return url # ====================== diff --git a/pywb/static/wombat.js b/pywb/static/wombat.js index fffd4a9a..f7ed4405 100644 --- a/pywb/static/wombat.js +++ b/pywb/static/wombat.js @@ -882,8 +882,9 @@ var _WBWombat = function($wbwindow, wbinfo) { var orig_getter = get_orig_getter(proto, prop); if (orig_getter) { var new_getter = function() { - var res = orig_getter.call(this); - if (!cond || cond(this)) { + var obj = proxy_to_obj(this); + var res = orig_getter.call(obj); + if (!cond || cond(obj)) { res = extract_orig(res); } return res; @@ -2395,10 +2396,14 @@ var _WBWombat = function($wbwindow, wbinfo) { value = cookies.join(",") - return orig_set_cookie.call(this, value); + return orig_set_cookie.call(proxy_to_obj(this), value); } - def_prop($wbwindow.document, "cookie", set_cookie, orig_get_cookie); + function get_cookie() { + return orig_get_cookie.call(proxy_to_obj(this)); + } + + def_prop($wbwindow.document, "cookie", set_cookie, get_cookie); } //============================================