diff Objects/unicodeobject.c @ 30150:5686ca297f55 2.3

Backport checkins: Fix refcount leak in PyUnicode_EncodeCharmap(). The bug surfaces when an encoding error occurs and the callback name is unknown, i.e. when the callback has to be called. The problem was that the fact that the callback has already been looked up was only recorded in a local variable in charmap_encoding_error(), because charmap_encoding_error() got it's own copy of the errorHandler pointer instead of a pointer to the pointer in PyUnicode_EncodeCharmap().
author Walter Dörwald <walter@livinglogic.de>
date Thu, 14 Aug 2003 20:26:44 +0000
parents a4fead0e24f8
children 3329b058db20
line wrap: on
line diff
--- a/Objects/unicodeobject.c	Thu Aug 14 20:01:40 2003 +0000
+++ b/Objects/unicodeobject.c	Thu Aug 14 20:26:44 2003 +0000
@@ -2876,7 +2876,7 @@
 int charmap_encoding_error(
     const Py_UNICODE *p, int size, int *inpos, PyObject *mapping,
     PyObject **exceptionObject,
-    int *known_errorHandler, PyObject *errorHandler, const char *errors,
+    int *known_errorHandler, PyObject **errorHandler, const char *errors,
     PyObject **res, int *respos)
 {
     PyObject *repunicode = NULL; /* initialize to prevent gcc warning */
@@ -2959,7 +2959,7 @@
 	    *inpos = collendpos;
 	    break;
 	default:
-	    repunicode = unicode_encode_call_errorhandler(errors, &errorHandler,
+	    repunicode = unicode_encode_call_errorhandler(errors, errorHandler,
 		encoding, reason, p, size, exceptionObject,
 		collstartpos, collendpos, &newpos);
 	    if (repunicode == NULL)
@@ -3024,7 +3024,7 @@
 	if (x==Py_None) { /* unencodable character */
 	    if (charmap_encoding_error(p, size, &inpos, mapping,
 		&exc,
-		&known_errorHandler, errorHandler, errors,
+		&known_errorHandler, &errorHandler, errors,
 		&res, &respos))
 		goto onError;
 	}