Kaydet (Commit) 6072e108 authored tarafından Paul McMillan's avatar Paul McMillan

Fixed #17693. Input validation and tests for base36 conversion utils. Thanks…

Fixed #17693. Input validation and tests for base36 conversion utils. Thanks Keryn Knight for the report.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@17525 bcc190cf-cafb-0310-a4f2-bffc1f526a37
üst 41256d23
...@@ -171,6 +171,8 @@ def int_to_base36(i): ...@@ -171,6 +171,8 @@ def int_to_base36(i):
""" """
digits = "0123456789abcdefghijklmnopqrstuvwxyz" digits = "0123456789abcdefghijklmnopqrstuvwxyz"
factor = 0 factor = 0
if (i < 0) or (i > sys.maxint):
raise ValueError("Base36 conversion input too large or incorrect type.")
# Find starting factor # Find starting factor
while True: while True:
factor += 1 factor += 1
......
...@@ -444,7 +444,7 @@ Atom1Feed ...@@ -444,7 +444,7 @@ Atom1Feed
.. function:: int_to_base36(i) .. function:: int_to_base36(i)
Converts an integer to a base 36 string. Converts a positive integer less than sys.maxint to a base 36 string.
``django.utils.safestring`` ``django.utils.safestring``
=========================== ===========================
......
import sys
from django.utils import http from django.utils import http
from django.utils import unittest from django.utils import unittest
from django.utils.datastructures import MultiValueDict from django.utils.datastructures import MultiValueDict
...@@ -98,3 +100,25 @@ class TestUtilsHttp(unittest.TestCase): ...@@ -98,3 +100,25 @@ class TestUtilsHttp(unittest.TestCase):
utils.fix_IE_for_vary(ie_request, response) utils.fix_IE_for_vary(ie_request, response)
self.assertFalse('Vary' in response) self.assertFalse('Vary' in response)
def test_base36(self):
# reciprocity works
for n in [0, 1, 1000, 1000000, sys.maxint]:
self.assertEqual(n, http.base36_to_int(http.int_to_base36(n)))
# bad input
for n in [-1, sys.maxint+1, '1', 'foo', {1:2}, (1,2,3)]:
self.assertRaises(ValueError, http.int_to_base36, n)
for n in ['#', ' ']:
self.assertRaises(ValueError, http.base36_to_int, n)
for n in [123, {1:2}, (1,2,3)]:
self.assertRaises(TypeError, http.base36_to_int, n)
# non-integer input
self.assertRaises(TypeError, http.int_to_base36, 3.141)
# more explicit output testing
for n, b36 in [(0,'0'), (1,'1'), (42,'16'), (818469960,'django')]:
self.assertEqual(http.int_to_base36(n), b36)
self.assertEqual(http.base36_to_int(b36), n)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment