[PATCH 2/2] [python] fix unsafe utf-8 decodings

2011-08-17 Thread Sebastian Spaeth
On Tue, 16 Aug 2011 22:37:47 +0100, Patrick Totzke  wrote:
> This prevents unsafe calls to decode for return
> value None in get_authors/get_subject

Thanks for the heads up, I just pushed a modified version of this. Some
comments on the code below.

Sebastian

> -tag = Tags._get(self._tags).decode('utf-8')
> +tag = Tags._get(self._tags)
> +if tag:
> +tag = tag.decode('UTF-8')

This was already safe as 
  if not nmlib.notmuch_tags_valid(self._tags):
was making sure that something useful will be returned.

> -return Thread._get_authors(self._thread).decode('UTF-8')
> +authors = Thread._get_authors(self._thread)
> +if authors:
> +return authors.decode('UTF-8')
> +return None

> -return Thread._get_subject(self._thread).decode('UTF-8')
> +subject = Thread._get_subject(self._thread)
> +if subject:
> +return subject.decode('UTF-8')
> +return None

Modified this to say:

foo = get_foo()
if foo is None:
   return None
return foo.decode('UTF-8')

Otherwise you would fall into a trap when e.g. the subject is empty and
a '' is returned. Your code would have returned "None". My version will
return ''.

Thanks!
-- next part --
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: 



Re: [PATCH 2/2] [python] fix unsafe utf-8 decodings

2011-08-17 Thread Sebastian Spaeth
On Tue, 16 Aug 2011 22:37:47 +0100, Patrick Totzke 
 wrote:
> This prevents unsafe calls to decode for return
> value None in get_authors/get_subject

Thanks for the heads up, I just pushed a modified version of this. Some
comments on the code below.

Sebastian

> -tag = Tags._get(self._tags).decode('utf-8')
> +tag = Tags._get(self._tags)
> +if tag:
> +tag = tag.decode('UTF-8')

This was already safe as 
  if not nmlib.notmuch_tags_valid(self._tags):
was making sure that something useful will be returned.

> -return Thread._get_authors(self._thread).decode('UTF-8')
> +authors = Thread._get_authors(self._thread)
> +if authors:
> +return authors.decode('UTF-8')
> +return None

> -return Thread._get_subject(self._thread).decode('UTF-8')
> +subject = Thread._get_subject(self._thread)
> +if subject:
> +return subject.decode('UTF-8')
> +return None

Modified this to say:

foo = get_foo()
if foo is None:
   return None
return foo.decode('UTF-8')

Otherwise you would fall into a trap when e.g. the subject is empty and
a '' is returned. Your code would have returned "None". My version will
return ''.

Thanks!


pgpeJyTdgLvs7.pgp
Description: PGP signature
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


[PATCH 2/2] [python] fix unsafe utf-8 decodings

2011-08-16 Thread Patrick Totzke
From: pazz 

This prevents unsafe calls to decode for return
value None in get_authors/get_subject
---
 bindings/python/notmuch/tag.py|4 +++-
 bindings/python/notmuch/thread.py |   10 --
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/bindings/python/notmuch/tag.py b/bindings/python/notmuch/tag.py
index d6abf28..9eb9fe2 100644
--- a/bindings/python/notmuch/tag.py
+++ b/bindings/python/notmuch/tag.py
@@ -86,7 +86,9 @@ class Tags(object):
 if not nmlib.notmuch_tags_valid(self._tags):
 self._tags = None
 raise StopIteration
-tag = Tags._get(self._tags).decode('utf-8')
+tag = Tags._get(self._tags)
+if tag:
+tag = tag.decode('UTF-8')
 nmlib.notmuch_tags_move_to_next(self._tags)
 return tag

diff --git a/bindings/python/notmuch/thread.py 
b/bindings/python/notmuch/thread.py
index 120f925..2a55bd9 100644
--- a/bindings/python/notmuch/thread.py
+++ b/bindings/python/notmuch/thread.py
@@ -292,7 +292,10 @@ class Thread(object):
 """
 if self._thread is None:
 raise NotmuchError(STATUS.NOT_INITIALIZED)
-return Thread._get_authors(self._thread).decode('UTF-8')
+authors = Thread._get_authors(self._thread)
+if authors:
+return authors.decode('UTF-8')
+return None

 def get_subject(self):
 """Returns the Subject of 'thread'
@@ -302,7 +305,10 @@ class Thread(object):
 """
 if self._thread is None:
 raise NotmuchError(STATUS.NOT_INITIALIZED)
-return Thread._get_subject(self._thread).decode('UTF-8')
+subject = Thread._get_subject(self._thread)
+if subject:
+return subject.decode('UTF-8')
+return None

 def get_newest_date(self):
 """Returns time_t of the newest message date
-- 
1.7.4.1



[PATCH 2/2] [python] fix unsafe utf-8 decodings

2011-08-16 Thread Patrick Totzke
From: pazz 

This prevents unsafe calls to decode for return
value None in get_authors/get_subject
---
 bindings/python/notmuch/tag.py|4 +++-
 bindings/python/notmuch/thread.py |   10 --
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/bindings/python/notmuch/tag.py b/bindings/python/notmuch/tag.py
index d6abf28..9eb9fe2 100644
--- a/bindings/python/notmuch/tag.py
+++ b/bindings/python/notmuch/tag.py
@@ -86,7 +86,9 @@ class Tags(object):
 if not nmlib.notmuch_tags_valid(self._tags):
 self._tags = None
 raise StopIteration
-tag = Tags._get(self._tags).decode('utf-8')
+tag = Tags._get(self._tags)
+if tag:
+tag = tag.decode('UTF-8')
 nmlib.notmuch_tags_move_to_next(self._tags)
 return tag
 
diff --git a/bindings/python/notmuch/thread.py 
b/bindings/python/notmuch/thread.py
index 120f925..2a55bd9 100644
--- a/bindings/python/notmuch/thread.py
+++ b/bindings/python/notmuch/thread.py
@@ -292,7 +292,10 @@ class Thread(object):
 """
 if self._thread is None:
 raise NotmuchError(STATUS.NOT_INITIALIZED)
-return Thread._get_authors(self._thread).decode('UTF-8')
+authors = Thread._get_authors(self._thread)
+if authors:
+return authors.decode('UTF-8')
+return None
 
 def get_subject(self):
 """Returns the Subject of 'thread'
@@ -302,7 +305,10 @@ class Thread(object):
 """
 if self._thread is None:
 raise NotmuchError(STATUS.NOT_INITIALIZED)
-return Thread._get_subject(self._thread).decode('UTF-8')
+subject = Thread._get_subject(self._thread)
+if subject:
+return subject.decode('UTF-8')
+return None
 
 def get_newest_date(self):
 """Returns time_t of the newest message date
-- 
1.7.4.1

___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch