Skip to content

Commit 10ab35c

Browse files
author
Sean Cribbs
committed
Merge pull request #274 from basho/bugfix/bucket-name-type
Disallow non-string bucket names. Fixes #268
2 parents 3f0c0c8 + 569ea25 commit 10ab35c

3 files changed

Lines changed: 25 additions & 1 deletion

File tree

riak/bucket.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ def __init__(self, client, name):
5555
try:
5656
if isinstance(name, basestring):
5757
name = name.encode('ascii')
58+
else:
59+
raise TypeError('Bucket name must be a string')
5860
except UnicodeError:
5961
raise TypeError('Unicode bucket names are not supported.')
6062

riak/client/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,9 @@ def bucket(self, name):
239239
240240
:rtype: :class:`RiakBucket <riak.bucket.RiakBucket>`
241241
"""
242+
if not isinstance(name, basestring):
243+
raise TypeError('Bucket name must be a string')
244+
242245
if name in self._buckets:
243246
return self._buckets[name]
244247
else:

riak/tests/test_kv.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import copy
55
import platform
66
from time import sleep
7-
from riak import ConflictError
7+
from riak import ConflictError, RiakBucket
88
from riak.resolver import default_resolver, last_written_resolver
99
try:
1010
import simplejson as json
@@ -95,6 +95,25 @@ def test_store_unicode_string(self):
9595
obj2 = bucket.get(self.key_name)
9696
self.assertEqual(data, obj2.encoded_data.decode('utf-8'))
9797

98+
def test_string_bucket_name(self):
99+
# Things that are not strings cannot be bucket names
100+
for bad in (12345, True, None, {}, []):
101+
with self.assertRaisesRegexp(TypeError, 'must be a string'):
102+
self.client.bucket(bad)
103+
104+
with self.assertRaisesRegexp(TypeError, 'must be a string'):
105+
RiakBucket(self.client, bad)
106+
107+
# Unicode bucket names are not supported, if they can't be
108+
# encoded to ASCII. This should be changed in a future
109+
# release.
110+
with self.assertRaisesRegexp(TypeError,
111+
'Unicode bucket names are not supported'):
112+
self.client.bucket(u'føø')
113+
114+
# This is fine, since it's already ASCII
115+
self.client.bucket('ASCII')
116+
98117
def test_generate_key(self):
99118
# Ensure that Riak generates a random key when
100119
# the key passed to bucket.new() is None.

0 commit comments

Comments
 (0)