From 52e44855dca5a9bb5004387eb2a27c4cd42d8f71 Mon Sep 17 00:00:00 2001 From: ketralnis Date: Fri, 19 Sep 2008 11:42:34 -0700 Subject: [PATCH] Fix for properly modifying click cookies, and accounting for malformed ones --- r2/r2/controllers/reddit_base.py | 22 ++++++++++------------ r2/r2/public/static/link.js | 3 ++- r2/r2/public/static/vote_piece.js | 10 ++++++---- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/r2/r2/controllers/reddit_base.py b/r2/r2/controllers/reddit_base.py index 8fbb929e1..c4b686863 100644 --- a/r2/r2/controllers/reddit_base.py +++ b/r2/r2/controllers/reddit_base.py @@ -137,20 +137,18 @@ def set_user_cookie(name, val): c.cookies[uname + '_' + name] = Cookie(value = val, domain = domain) +valid_click_cookie = re.compile(r'(t[0-9]_[a-zA-Z0-9]+:)+').match def read_click_cookie(): if c.user_is_loggedin: - cook = [s for s in read_user_cookie('click').split(':') if s] - if cook: - try: - things = Thing._by_fullname(cook, return_dict = False) - for t in things: - def foo(t1, user): - return lambda: t1._click(user) - utils.worker.do(foo(t, c.user)) - except: - pass - finally: - set_user_cookie('click', '') + click_cookie = read_user_cookie('click') + if click_cookie and valid_click_cookie(click_cookie): + ids = [s for s in click_cookie.split(':') if s] + things = Thing._by_fullname(ids, return_dict = False) + for t in things: + def foo(t1, user): + return lambda: t1._click(user) + utils.worker.do(foo(t, c.user)) + set_user_cookie('click', '') def read_mod_cookie(): diff --git a/r2/r2/public/static/link.js b/r2/r2/public/static/link.js index d07c987cb..c6b2e300d 100644 --- a/r2/r2/public/static/link.js +++ b/r2/r2/public/static/link.js @@ -482,7 +482,8 @@ function setClick(a, css_class) { } function setClickCookie(id) { - createCookie("click", readCookie("click") + id + ":"); + var newcookie = readCookie("click") + id + ":"; + createCookie("click", newcookie); } diff --git a/r2/r2/public/static/vote_piece.js b/r2/r2/public/static/vote_piece.js index 812886e2a..d2f290b57 100644 --- a/r2/r2/public/static/vote_piece.js +++ b/r2/r2/public/static/vote_piece.js @@ -25,14 +25,16 @@ function createLCookie(name,value,days) { } function createCookie(name, value, days) { - return createLCookie(cookieName(name)); + return createLCookie(cookieName(name), value, days); } function readLCookie(nameEQ) { nameEQ=nameEQ+'='; var ca=document.cookie.split(';'); - for(var i=0;i< ca.length;i++) { - var c =ca[i]; + /* walk the list backwards so we always get the last cookie in the + list */ + for(var i = ca.length-1; i >= 0; i--) { + var c = ca[i]; while(c.charAt(0)==' ') c=c.substring(1,c.length); if(c.indexOf(nameEQ)==0) { return unescape(c.substring(nameEQ.length,c.length)); @@ -42,7 +44,7 @@ function readLCookie(nameEQ) { } function readCookie(name) { - var nameEQ=cookieName(name) + "="; + var nameEQ=cookieName(name); return readLCookie(nameEQ); }