You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ponymail.apache.org by se...@apache.org on 2016/12/18 12:44:43 UTC

incubator-ponymail git commit: properly remove nulls from account.credentials.altemail

Repository: incubator-ponymail
Updated Branches:
  refs/heads/master ade18f4a5 -> 05ee6da3d


properly remove nulls from account.credentials.altemail 

This fixes #309

Project: http://git-wip-us.apache.org/repos/asf/incubator-ponymail/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ponymail/commit/05ee6da3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ponymail/tree/05ee6da3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ponymail/diff/05ee6da3

Branch: refs/heads/master
Commit: 05ee6da3d7b5e451254d24182591cec38cef15dd
Parents: ade18f4
Author: Sebb <se...@apache.org>
Authored: Sun Dec 18 12:25:25 2016 +0000
Committer: Sebb <se...@apache.org>
Committed: Sun Dec 18 12:25:25 2016 +0000

----------------------------------------------------------------------
 CHANGELOG.md             |  1 +
 site/api/preferences.lua | 41 +++++++++++++++++++++++++++--------------
 2 files changed, 28 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/05ee6da3/CHANGELOG.md
----------------------------------------------------------------------
diff --git a/CHANGELOG.md b/CHANGELOG.md
index daef88f..88a3866 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -86,6 +86,7 @@
 - An unauthorised private mail should be treated like a non-existent mail (#295)
 - Move common anonymizing code to utils (#308)
 - Move extractCanonEmail to utils
+- preferences does not properly remove nulls from account.credentials.altemail (#309)
 
 ## CHANGES in 0.9b:
 

http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/05ee6da3/site/api/preferences.lua
----------------------------------------------------------------------
diff --git a/site/api/preferences.lua b/site/api/preferences.lua
index da1d944..dcad4db 100644
--- a/site/api/preferences.lua
+++ b/site/api/preferences.lua
@@ -27,6 +27,28 @@ local aaa = require 'lib/aaa'
 local utils = require 'lib/utils'
 
 --[[
+    Remove nulls values from a table
+    This is for use in tidying up account.credentials.altemail
+    which may contain null entries.
+    Rather than continually check for them, remove them from
+    the input before use.
+]]
+local function filtertable(input)
+    -- table.remove can affect pairs()
+    -- so repeat until no more to do
+    repeat
+        local isClean = true
+        for k, v in pairs(input) do
+            if not v or v == JSON.null then
+                table.remove(input, k)
+                isClean = false
+                break
+            end
+        end
+    until isClean
+end
+
+--[[
 Get login details (if logged in), mail list counts and descriptions
 
 Parameters: (cookie required)
@@ -124,17 +146,14 @@ Pony Mail - Email for Ponies and People.
     
     -- verify alt email?
     if get.verify and get.hash and account and account.credentials.altemail then
+        filtertable(account.credentials.altemail)
         local verified = false
         for k, v in pairs(account.credentials.altemail) do
-            if v and not (v == JSON.null) and v.hash == get.hash then
+            if v.hash == get.hash then
                 account.credentials.altemail[k].verified = true
                 verified = true
                 break
             end
-            if v == JSON.null then
-                table.remove(account.credentials.altemail, k)
-                break
-            end
         end
         user.save(r, account, true)
         cross.contentType(r, "text/plain")
@@ -148,9 +167,9 @@ Pony Mail - Email for Ponies and People.
     
     -- remove alt email?
     if get.removealt and account and account.credentials.altemail then
+        filtertable(account.credentials.altemail)
         for k, v in pairs(account.credentials.altemail) do
-            -- allow for null just in case table was corrupted
-            if v and not (v == JSON.null) and v.email == get.removealt then
+            if v.email == get.removealt then
                 table.remove(account.credentials.altemail, k)
                 break
             end
@@ -378,14 +397,8 @@ Pony Mail - Email for Ponies and People.
     
     local alts = {}
     if account and account.credentials and type(account.credentials.altemail) == "table" then
+        filtertable(account.credentials.altemail)
         for k, v in pairs(account.credentials.altemail) do
-                
-            -- null check from previous corruptions
-            if v == JSON.null then
-                table.remove(account.credentials.altemail, k)
-                break
-            end
-            
             if v.verified then
                 table.insert(alts, v.email)
             end