Commit Graph

154 Commits

Author SHA1 Message Date
Oren Milman 2b382dd612 bpo-31505: Fix an assertion failure in json, in case _json.make_encoder() received a bad encoder() argument. (#3643) 2017-09-24 12:07:12 +03:00
Eric Snow fc1bf872e9 bpo-30860: Move windows.h include out of internal/*.h. (#3458)
PR #3397 introduced a large number of warnings to the Windows build. This patch fixes them.
2017-09-11 18:30:43 -07:00
Eric Snow 2ebc5ce42a bpo-30860: Consolidate stateful runtime globals. (#3397)
* group the (stateful) runtime globals into various topical structs
* consolidate the topical structs under a single top-level _PyRuntimeState struct
* add a check-c-globals.py script that helps identify runtime globals

Other globals are excluded (see globals.txt and check-c-globals.py).
2017-09-07 23:51:28 -06:00
INADA Naoki a6296d34a4 bpo-31095: fix potential crash during GC (GH-2974) 2017-08-24 14:55:17 +09:00
Serhiy Storchaka 49f6449ef4 bpo-30936: Fix a reference leak in json when fail to sort keys. (#2712) 2017-07-16 07:29:16 +03:00
Segev Finer 541bd28941 bpo-30911: Fix a crash in json on platforms with unsigned char (#2684)
when pass bad strict argument.
2017-07-13 08:52:08 +03:00
Serhiy Storchaka ac5bbd43bc bpo-30248: Convert boolean arguments only once in _json. (#1423)
Rather than saving the Python object and calling PyObject_IsTrue()
every time when the boolean argument is used, call it only once and
save C boolean value.
2017-05-28 15:31:49 +03:00
Serhiy Storchaka 76a3e51a40 bpo-30243: Fixed the possibility of a crash in _json. (#1420)
It was possible to get a core dump by using uninitialized
_json objects. Now __new__ methods create initialized objects.
__init__ methods are removed.
2017-05-05 10:08:49 +03:00
Serhiy Storchaka fff9a31a91 bpo-29865: Use PyXXX_GET_SIZE macros rather than Py_SIZE for concrete types. (#748) 2017-03-21 08:53:25 +02:00
Serhiy Storchaka d1302c0154 Issue #28999: Use Py_RETURN_NONE, Py_RETURN_TRUE and Py_RETURN_FALSE wherever
possible but Coccinelle couldn't find opportunity.
2017-01-23 10:23:58 +02:00
Serhiy Storchaka 8cbc51ab3d Py_SIZE() was misused for dict. 2017-01-13 08:38:15 +02:00
Serhiy Storchaka a6758427fd Py_SIZE() was misused for dict. 2017-01-13 08:37:05 +02:00
Serhiy Storchaka 3023ebb43f Py_SIZE() was misused for dict. 2017-01-13 08:34:34 +02:00
Serhiy Storchaka 0f05512104 Fixed possible reference leaks in the _json module. 2017-01-03 11:20:15 +02:00
Serhiy Storchaka 8d979d576e Fixed possible reference leaks in the _json module. 2017-01-03 11:19:48 +02:00
Serhiy Storchaka 21fe721345 Fixed possible reference leaks in the _json module. 2017-01-03 11:17:44 +02:00
Victor Stinner 4c38154a43 Don't parenthesis in _PyObject_CallMethodId() format
Issue #28915: Without parenthesis, _PyObject_CallMethodId() avoids the creation
a temporary tuple, and so is more efficient.
2016-12-09 00:33:39 +01:00
Victor Stinner de4ae3d486 Backed out changeset b9c9691c72c5
Issue #28858: The change b9c9691c72c5 introduced a regression. It seems like
_PyObject_CallArg1() uses more stack memory than
PyObject_CallFunctionObjArgs().
2016-12-04 22:59:09 +01:00
Victor Stinner 27580c1fb5 Replace PyObject_CallFunctionObjArgs() with fastcall
* PyObject_CallFunctionObjArgs(func, NULL) => _PyObject_CallNoArg(func)
* PyObject_CallFunctionObjArgs(func, arg, NULL) => _PyObject_CallArg1(func, arg)

PyObject_CallFunctionObjArgs() allocates 40 bytes on the C stack and requires
extra work to "parse" C arguments to build a C array of PyObject*.

_PyObject_CallNoArg() and _PyObject_CallArg1() are simpler and don't allocate
memory on the C stack.

This change is part of the fastcall project. The change on listsort() is
related to the issue #23507.
2016-12-01 14:43:22 +01:00
Serhiy Storchaka 96cdbe7bc8 Issue #26719: More efficient formatting of ints and floats in json. 2016-04-10 14:43:04 +03:00
Serhiy Storchaka e0805cf10e Issue #26719: More efficient formatting of ints and floats in json. 2016-04-10 14:41:19 +03:00
Serhiy Storchaka ef1585eb9a Issue #25923: Added more const qualifiers to signatures of static and private functions. 2015-12-25 20:01:53 +02:00
Serhiy Storchaka f002225f7e Issue #24683: Fixed crashes in _json functions called with arguments of
inappropriate type.
2015-07-26 09:02:23 +03:00
Serhiy Storchaka 83236f7a8b Issue #24683: Fixed crashes in _json functions called with arguments of
inappropriate type.
2015-07-26 09:01:22 +03:00
Benjamin Peterson 7b78d4364d prevent integer overflow in escape_unicode (closes #24522) 2015-06-27 15:01:51 -05:00
Serhiy Storchaka ac5569b1fa Issue #24115: Update uses of PyObject_IsTrue(), PyObject_Not(),
PyObject_IsInstance(), PyObject_RichCompareBool() and _PyDict_Contains()
to check for and handle errors correctly.
2015-05-30 17:48:19 +03:00
Serhiy Storchaka fa494fd883 Issue #24115: Update uses of PyObject_IsTrue(), PyObject_Not(),
PyObject_IsInstance(), PyObject_RichCompareBool() and _PyDict_Contains()
to check for and handle errors correctly.
2015-05-30 17:45:22 +03:00
Benjamin Peterson 88abdef02b merge 3.4 (#24094) 2015-05-02 22:37:13 -04:00
Benjamin Peterson 122f4b1bda merge 3.3 (#24094) 2015-05-02 22:36:26 -04:00
Benjamin Peterson 501182a47b just sort the items tuple directly (closes #24094) 2015-05-02 22:28:04 -04:00
Victor Stinner f024d263b4 Issue #23685: Fix usage of PyMODINIT_FUNC in _json, _scproxy, nis, pyexpat
_codecs_cn, _codecs_hk, _codecs_iso2022, _codecs_jp, _codecs_kr and _codecs_tw
modules.

pyexpat.c doesn't need to redeclare PyMODINIT_FUNC, it's already declared in
Include/pyport.h.
2015-03-17 17:48:27 +01:00
Serhiy Storchaka 483405bcca Issue #22883: Got rid of outdated references to PyInt and PyString in comments. 2015-02-17 10:14:30 +02:00
Benjamin Peterson 71cf91cc09 merge 3.4 (#23369) 2015-02-01 18:00:19 -05:00
Benjamin Peterson 3675cd9db1 merge 3.3 (#23369) 2015-02-01 17:59:49 -05:00
Benjamin Peterson e3bfe19358 fix possible overflow in encode_basestring_ascii (closes #23369) 2015-02-01 17:53:53 -05:00
Serhiy Storchaka 47efb4a5dc Issue #19361: JSON decoder now raises JSONDecodeError instead of ValueError. 2015-01-26 13:16:30 +02:00
Antoine Pitrou dc3eaa80d4 Issue #23206: Make ``json.dumps(..., ensure_ascii=False)`` as fast as the default case of ``ensure_ascii=True``. Patch by Naoki Inada. 2015-01-11 16:41:01 +01:00
Victor Stinner 31a3ec313d Issue #22338: Fix a crash in the json module on memory allocation failure. 2014-09-10 23:31:42 +02:00
Benjamin Peterson 70d92a96ab merge 3.3 2014-04-14 11:48:21 -04:00
Benjamin Peterson 9beee049b0 merge 3.2 2014-04-14 11:46:51 -04:00
Benjamin Peterson 6ef2b36afa disallow a negative idx parameter 2014-04-14 11:45:21 -04:00
Benjamin Peterson 584f5cbf16 merge 3.3 2014-04-13 22:31:42 -04:00
Benjamin Peterson 156285c35f merge 3.2 2014-04-13 22:28:16 -04:00
Benjamin Peterson 99b5afab74 in scan_once, prevent the reading of arbitrary memory when passed a negative index
Bug reported by Guido Vranken.
2014-04-13 22:10:38 -04:00
Serhiy Storchaka 687ff0ecdf Issue #11489: JSON decoder now accepts lone surrogates. 2013-11-26 21:27:11 +02:00
Serhiy Storchaka c93329b3dd Issue #11489: JSON decoder now accepts lone surrogates. 2013-11-26 21:25:28 +02:00
Ethan Furman a4998a7041 Close #18264: int- and float-derived enums now converted to int or float. 2013-08-10 13:01:45 -07:00
Christian Heimes 75e923fcf2 Issue #16847: Fixed improper use of _PyUnicode_CheckConsistency() in
non-pydebug builds. Several extension modules now compile cleanly when
assert()s are enabled in standard builds (-DDEBUG flag).
2013-01-03 09:22:41 +01:00
Christian Heimes f402e922f3 Issue #16847: Fixed improper use of _PyUnicode_CheckConsistency() in
non-pydebug builds. Several extension modules now compile cleanly when
assert()s are enabled in standard builds (-DDEBUG flag).
2013-01-03 09:21:55 +01:00
Ezio Melotti 37623ab5f1 #16009: JSON error messages now provide more information. Patch by Serhiy Storchaka. 2013-01-03 08:44:15 +02:00
Antoine Pitrou cbb028466b Issue #16590: remove obsolete compatibility code from the _json module.
Patch by Serhiy Storchaka.
2012-12-01 19:34:16 +01:00
Antoine Pitrou 53d36b6912 Issue #16228: Fix a crash in the json module where a list changes size while it is being encoded.
Patch by Serhiy Storchaka.
2012-11-01 20:03:30 +01:00
Antoine Pitrou 5ebe65f8cb Issue #16228: Fix a crash in the json module where a list changes size while it is being encoded.
Patch by Serhiy Storchaka.
2012-11-01 19:59:21 +01:00
Antoine Pitrou 9f69e79c45 Issue #16228: Fix a crash in the json module where a list changes size while it is being encoded.
Patch by Serhiy Storchaka.
2012-11-01 19:52:06 +01:00
Victor Stinner 76df43de30 Issue #16330: Use surrogate-related macros
Patch written by Serhiy Storchaka.
2012-10-30 01:42:39 +01:00
Antoine Pitrou 802d669044 Issue #5067: improve some json error messages.
Patch by Serhiy Storchaka.
2012-06-29 01:59:54 +02:00
Antoine Pitrou 2d24e94bbe Issue #5067: improve some json error messages.
Patch by Serhiy Storchaka.
2012-06-29 01:58:26 +02:00
Victor Stinner 8f825060f1 Check newly created consistency using _PyUnicode_CheckConsistency(str, 1)
* In debug mode, fill the string data with invalid characters
 * Simplify also reference counting in PyCodec_BackslashReplaceErrors()
   and PyCodec_XMLCharRefReplaceError()
2012-04-27 13:55:39 +02:00
Antoine Pitrou d0acb411ef Issue #14387: Do not include accu.h from Python.h. 2012-03-22 14:42:18 +01:00
Victor Stinner f5cff56a1b Issue #13088: Add shared Py_hexdigits constant to format a number into base 16 2011-10-14 02:13:11 +02:00
Victor Stinner d9c0631d77 Strip trailing spaces in _json.c 2011-10-11 21:56:19 +02:00
Victor Stinner c4f281eba3 Fix misuse of PyUnicode_GET_SIZE, use PyUnicode_GET_LENGTH instead 2011-10-11 22:11:42 +02:00
Antoine Pitrou 699cd9f7f1 Remove unused variable 2011-10-11 04:06:47 +02:00
Martin v. Löwis 1ee1b6fe0d Use identifier API for PyObject_GetAttrString. 2011-10-10 18:11:30 +02:00
Martin v. Löwis c47adb04b3 Change PyUnicode_KIND to 1,2,4. Drop _KIND_SIZE and _CHARACTER_SIZE. 2011-10-07 20:55:35 +02:00
Antoine Pitrou 90c30e87be Remove now duplicate code in _json.c; instead, reuse the new private lib 2011-10-06 19:09:51 +02:00
Martin v. Löwis d63a3b8beb Implement PEP 393. 2011-09-28 07:41:54 +02:00
Antoine Pitrou 18bb330203 Fix compilation under Windows 2011-08-20 03:19:34 +02:00
Antoine Pitrou df7fc9dda7 Issue #12778: Reduce memory consumption when JSON-encoding a large container of many small objects. 2011-08-19 18:03:14 +02:00
Ezio Melotti f8d6fd605d #12051: merge with 3.2. 2011-05-11 01:23:41 +03:00
Ezio Melotti f188bc5d46 #12051: merge with 3.1. 2011-05-11 01:10:27 +03:00
Ezio Melotti 136726537f #12051: Fix segfault in json.dumps() while encoding highly-nested objects using the C accelerations. 2011-05-11 01:02:56 +03:00
Ezio Melotti 9c18778695 #12017: merge with 3.2. 2011-05-07 18:29:14 +03:00
Ezio Melotti 06383ee090 #12017: merge with 3.1. 2011-05-07 18:15:34 +03:00
Ezio Melotti 362b95102f #12017: Fix segfault in json.loads() while decoding highly-nested objects using the C accelerations. 2011-05-07 17:58:09 +03:00
Antoine Pitrou f645451d78 Issue #11856: Speed up parsing of JSON numbers. 2011-04-25 19:16:06 +02:00
Brett Cannon b94767ff44 Issue #8914: fix various warnings from the Clang static analyzer v254. 2011-02-22 20:15:44 +00:00
Antoine Pitrou 2397dd58b7 Issue #10314: improve performance of JSON encoding with sort_keys=True 2010-11-04 16:51:32 +00:00
Antoine Pitrou ae136da881 Merged revisions 85342 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r85342 | antoine.pitrou | 2010-10-09 17:24:28 +0200 (sam., 09 oct. 2010) | 4 lines

  Issue #10055: Make json C89-compliant in UCS4 mode.
........
2010-10-09 15:26:41 +00:00
Antoine Pitrou 5b0e9e84e9 Issue #10055: Make json C89-compliant in UCS4 mode. 2010-10-09 15:24:28 +00:00
Georg Brandl 4009c9edfc Merged revisions 82805-82806,83523-83527,83536,83538,83542,83546-83548,83550-83555,83558,83560 via svnmerge from
svn+ssh://svn.python.org/python/branches/py3k

........
  r82805 | georg.brandl | 2010-07-11 11:42:10 +0200 (So, 11 Jul 2010) | 1 line

  #7935: cross-reference to ast.literal_eval() from eval() docs.
........
  r82806 | georg.brandl | 2010-07-11 12:22:44 +0200 (So, 11 Jul 2010) | 1 line

  #9223: link to Command class reference, and move Command interface docs nearer to class docs.
........
  r83523 | georg.brandl | 2010-08-02 14:06:18 +0200 (Mo, 02 Aug 2010) | 1 line

  #9209 and #7781: fix two crashes in pstats interactive browser.
........
  r83524 | georg.brandl | 2010-08-02 14:20:23 +0200 (Mo, 02 Aug 2010) | 1 line

  #9428: fix running scripts from profile/cProfile with their own name and the right namespace.  Same fix as for trace.py in #1690103.
........
  r83525 | georg.brandl | 2010-08-02 14:36:24 +0200 (Mo, 02 Aug 2010) | 1 line

  Get rid of spurious "threading" entries in trace output.
........
  r83526 | georg.brandl | 2010-08-02 14:40:22 +0200 (Mo, 02 Aug 2010) | 1 line

  Fix softspace relic.
........
  r83527 | georg.brandl | 2010-08-02 14:48:46 +0200 (Mo, 02 Aug 2010) | 1 line

  #3821: beginnings of a trace.py unittest.
........
  r83536 | georg.brandl | 2010-08-02 19:49:25 +0200 (Mo, 02 Aug 2010) | 1 line

  #8578: mention danger of not incref'ing weak referenced object.
........
  r83538 | georg.brandl | 2010-08-02 20:10:13 +0200 (Mo, 02 Aug 2010) | 1 line

  #6928: fix class docs w.r.t. new metaclasses.
........
  r83542 | georg.brandl | 2010-08-02 20:56:54 +0200 (Mo, 02 Aug 2010) | 1 line

  Move test_SimpleHTTPServer into test_httpservers.
........
  r83546 | georg.brandl | 2010-08-02 21:16:34 +0200 (Mo, 02 Aug 2010) | 1 line

  #7973: Fix distutils options spelling.
........
  r83547 | georg.brandl | 2010-08-02 21:19:26 +0200 (Mo, 02 Aug 2010) | 1 line

  #7386: add example that shows that trailing path separators are stripped.
........
  r83548 | georg.brandl | 2010-08-02 21:23:34 +0200 (Mo, 02 Aug 2010) | 1 line

  #8172: how does one use a property?
........
  r83550 | georg.brandl | 2010-08-02 21:32:43 +0200 (Mo, 02 Aug 2010) | 1 line

  #9451: strengthen warning about __*__ special name usage.
........
  r83551 | georg.brandl | 2010-08-02 21:35:06 +0200 (Mo, 02 Aug 2010) | 1 line

  Remove XXX comment that was displayed.
........
  r83552 | georg.brandl | 2010-08-02 21:36:36 +0200 (Mo, 02 Aug 2010) | 1 line

  #9438: clarify that constant names also cannot be assigned as attributes.
........
  r83553 | georg.brandl | 2010-08-02 21:39:17 +0200 (Mo, 02 Aug 2010) | 1 line

  Remove redundant information.
........
  r83554 | georg.brandl | 2010-08-02 21:43:05 +0200 (Mo, 02 Aug 2010) | 1 line

  #7280: note about nasmw.exe.
........
  r83555 | georg.brandl | 2010-08-02 21:44:48 +0200 (Mo, 02 Aug 2010) | 1 line

  #8861: remove unused variable.
........
  r83558 | georg.brandl | 2010-08-02 22:05:19 +0200 (Mo, 02 Aug 2010) | 1 line

  #8648: document UTF-7 codec functions.
........
  r83560 | georg.brandl | 2010-08-02 22:16:18 +0200 (Mo, 02 Aug 2010) | 1 line

  #9087: update json docstrings -- unicode and long do not exist anymore.
........
2010-10-06 08:26:09 +00:00
Antoine Pitrou 7d6e076f6d Issue #7451: Improve decoding performance of JSON objects, and reduce
the memory consumption of said decoded objects when they use the same
strings as keys.
2010-09-04 20:16:53 +00:00
Georg Brandl c8284cfc57 #9087: update json docstrings -- unicode and long do not exist anymore. 2010-08-02 20:16:18 +00:00
Doug Hellmann 76e57947a1 Merged revisions 83016 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r83016 | doug.hellmann | 2010-07-21 08:29:04 -0400 (Wed, 21 Jul 2010) | 1 line

  Apply patch from Ray Allen for issue 9296
........
2010-07-21 12:35:38 +00:00
Doug Hellmann 1c524754f6 Apply patch from Ray Allen for issue 9296 2010-07-21 12:29:04 +00:00
Antoine Pitrou 7f14f0d8a0 Recorded merge of revisions 81032 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r81032 | antoine.pitrou | 2010-05-09 17:52:27 +0200 (dim., 09 mai 2010) | 9 lines

  Recorded merge of revisions 81029 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r81029 | antoine.pitrou | 2010-05-09 16:46:46 +0200 (dim., 09 mai 2010) | 3 lines

    Untabify C files. Will watch buildbots.
  ........
................
2010-05-09 16:14:21 +00:00
Antoine Pitrou f95a1b3c53 Recorded merge of revisions 81029 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r81029 | antoine.pitrou | 2010-05-09 16:46:46 +0200 (dim., 09 mai 2010) | 3 lines

  Untabify C files. Will watch buildbots.
........
2010-05-09 15:52:27 +00:00
Antoine Pitrou 4fad6bdde9 Merged revisions 76710 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r76710 | antoine.pitrou | 2009-12-08 16:57:31 +0100 (mar., 08 déc. 2009) | 10 lines

  Merged revisions 76708 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r76708 | antoine.pitrou | 2009-12-08 16:40:51 +0100 (mar., 08 déc. 2009) | 4 lines

    Issue #6986: Fix crash in the JSON C accelerator when called with the
    wrong parameter types.  Patch by Victor Stinner.
  ........
................
2009-12-08 16:00:03 +00:00
Antoine Pitrou 781eba7972 Merged revisions 76708 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r76708 | antoine.pitrou | 2009-12-08 16:40:51 +0100 (mar., 08 déc. 2009) | 4 lines

  Issue #6986: Fix crash in the JSON C accelerator when called with the
  wrong parameter types.  Patch by Victor Stinner.
........
2009-12-08 15:57:31 +00:00
Raymond Hettinger 491a4cb8d9 Fix TODO: do the sort by just the key, not the key/value pair. 2009-05-27 11:19:02 +00:00
Raymond Hettinger bcf6f92dc5 * Fix-up a TODO (support the sort_key option).
* Fix an error where True/False were being written-out
  as title-cased strings when used a dictionary keys.
* Speed-up iteration over dicts by looping over items()
  rather than keys() followed by value lookups.
* TODO:  sort only by keys, not keys and values.
2009-05-27 09:58:34 +00:00
Raymond Hettinger c8d952dfe4 Issue 6105: json encoder to respect iteration order of its inputs. 2009-05-27 06:50:31 +00:00
Georg Brandl 596820539f Merged revisions 72314 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r72314 | georg.brandl | 2009-05-05 09:48:12 +0200 (Di, 05 Mai 2009) | 1 line

  #5932: fix error return in _convertPyInt_AsSsize_t() conversion function.
........
2009-05-05 07:52:05 +00:00
Hirokazu Yamamoto fecf5d143a Fixed warning. (Should not use *const* as variable name) 2009-05-02 15:55:19 +00:00
Benjamin Peterson c6b607d4a9 port simplejson upgrade from the trunk #4136
json also now works only with unicode strings

Patch by Antoine Pitrou; updated by me
2009-05-02 12:36:44 +00:00
Benjamin Peterson 8e8c2152fb Merged revisions 66938,66942 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r66938 | benjamin.peterson | 2008-10-16 16:27:54 -0500 (Thu, 16 Oct 2008) | 1 line

  fix possible ref leak
........
  r66942 | benjamin.peterson | 2008-10-16 16:48:06 -0500 (Thu, 16 Oct 2008) | 1 line

  fix more possible ref leaks in _json and use Py_CLEAR
........
2008-10-16 21:56:24 +00:00
Benjamin Peterson a13d475901 merge r66932 and add a few py3k only checks 2008-10-16 21:17:24 +00:00
Antoine Pitrou ee58fa484e #3560: cleanup C memoryview API 2008-08-19 18:22:14 +00:00
Martin v. Löwis 423be95dcf Merged revisions 65654 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r65654 | martin.v.loewis | 2008-08-12 16:49:50 +0200 (Tue, 12 Aug 2008) | 6 lines

  Issue #3139: Make buffer-interface thread-safe wrt. PyArg_ParseTuple,
  by denying s# to parse objects that have a releasebuffer procedure,
  and introducing s*.

  More module might need to get converted to use s*.
........
2008-08-13 15:53:07 +00:00
Benjamin Peterson 7af6eec6d0 Merged revisions 65147 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r65147 | bob.ippolito | 2008-07-19 16:59:50 -0500 (Sat, 19 Jul 2008) | 1 line

  #3322: bounds checking for _json.scanstring
........
2008-07-19 22:26:35 +00:00