repr's converted to using PyString_FromFormat() instead of sprintf'ing
into a hardcoded char* buffer.

Closes patch #454743.
diff --git a/Objects/bufferobject.c b/Objects/bufferobject.c
index 4c213ce..242261f 100644
--- a/Objects/bufferobject.c
+++ b/Objects/bufferobject.c
@@ -184,28 +184,22 @@
 static PyObject *
 buffer_repr(PyBufferObject *self)
 {
-	char buf[300];
 	char *status = self->b_readonly ? "read-only" : "read-write";
 
 	if ( self->b_base == NULL )
-	{
-		sprintf(buf, "<%s buffer ptr %p, size %d at %p>",
-			status,
-			self->b_ptr,
-			self->b_size,
-			self);
-	}
+		return PyString_FromFormat("<%s buffer ptr %p, size %d at %p>",
+					   status,
+					   self->b_ptr,
+					   self->b_size,
+					   self);
 	else
-	{
-		sprintf(buf, "<%s buffer for %p, ptr %p, size %d at %p>",
+		return PyString_FromFormat(
+			"<%s buffer for %p, ptr %p, size %d at %p>",
 			status,
 			self->b_base,
 			self->b_ptr,
 			self->b_size,
 			self);
-	}
-
-	return PyString_FromString(buf);
 }
 
 static long
diff --git a/Objects/cellobject.c b/Objects/cellobject.c
index 9a36776..47e5174 100644
--- a/Objects/cellobject.c
+++ b/Objects/cellobject.c
@@ -62,14 +62,12 @@
 static PyObject *
 cell_repr(PyCellObject *op)
 {
-	char buf[256];
-
 	if (op->ob_ref == NULL)
-		sprintf(buf, "<cell at %p: empty>", op);
-	else
-		sprintf(buf, "<cell at %p: %.80s object at %p>",
-			op, op->ob_ref->ob_type->tp_name, op->ob_ref);
-	return PyString_FromString(buf);
+		return PyString_FromFormat("<cell at %p: empty>", op);
+
+	return PyString_FromFormat("<cell at %p: %.80s object at %p>",
+				   op, op->ob_ref->ob_type->tp_name,
+				   op->ob_ref);
 }
 
 static int
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 0f39d4b..f1145a4 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -313,19 +313,17 @@
 class_repr(PyClassObject *op)
 {
 	PyObject *mod = PyDict_GetItemString(op->cl_dict, "__module__");
-	char buf[140];
 	char *name;
 	if (op->cl_name == NULL || !PyString_Check(op->cl_name))
 		name = "?";
 	else
 		name = PyString_AsString(op->cl_name);
 	if (mod == NULL || !PyString_Check(mod))
-		sprintf(buf, "<class ?.%.100s at %p>", name, op);
+		return PyString_FromFormat("<class ?.s at %p>", name, op);
 	else
-		sprintf(buf, "<class %.50s.%.50s at %p>",
-			PyString_AsString(mod),
-			name, op);
-	return PyString_FromString(buf);
+		return PyString_FromFormat("<class %s.%s at %p>",
+					   PyString_AsString(mod),
+					   name, op);
 }
 
 static PyObject *
@@ -776,7 +774,6 @@
 		reprstr = PyString_InternFromString("__repr__");
 	func = instance_getattr(inst, reprstr);
 	if (func == NULL) {
-		char buf[140];
 		PyObject *classname = inst->in_class->cl_name;
 		PyObject *mod = PyDict_GetItemString(
 			inst->in_class->cl_dict, "__module__");
@@ -787,13 +784,12 @@
 			cname = "?";
 		PyErr_Clear();
 		if (mod == NULL || !PyString_Check(mod))
-			sprintf(buf, "<?.%.100s instance at %p>",
-				cname, inst);
+			return PyString_FromFormat("<?.%s instance at %p>",
+						   cname, inst);
 		else
-			sprintf(buf, "<%.50s.%.50s instance at %p>",
-				PyString_AsString(mod),
-				cname, inst);
-		return PyString_FromString(buf);
+			return PyString_FromFormat("<%s.%s instance at %p>",
+						   PyString_AsString(mod),
+						   cname, inst);
 	}
 	res = PyEval_CallObject(func, (PyObject *)NULL);
 	Py_DECREF(func);
@@ -2042,7 +2038,6 @@
 static PyObject *
 instancemethod_repr(PyMethodObject *a)
 {
-	char buffer[240];
 	PyObject *self = a->im_self;
 	PyObject *func = a->im_func;
 	PyObject *klass = a->im_class;
@@ -2072,8 +2067,8 @@
 			sklassname = PyString_AS_STRING(klassname);
 	}
 	if (self == NULL)
-		sprintf(buffer, "<unbound method %.100s.%.100s>",
-			sklassname, sfuncname);
+		result = PyString_FromFormat("<unbound method %s.%s>",
+					     sklassname, sfuncname);
 	else {
 		/* XXX Shouldn't use repr() here! */
 		PyObject *selfrepr = PyObject_Repr(self);
@@ -2083,11 +2078,11 @@
 			Py_DECREF(selfrepr);
 			goto fail;
 		}
-		sprintf(buffer, "<bound method %.60s.%.60s of %.60s>",
-			sklassname, sfuncname, PyString_AS_STRING(selfrepr));
+		result = PyString_FromFormat("<bound method %s.%s of %s>",
+					     sklassname, sfuncname,
+					     PyString_AS_STRING(selfrepr));
 		Py_DECREF(selfrepr);
 	}
-	result = PyString_FromString(buffer);
   fail:
 	Py_XDECREF(funcname);
 	Py_XDECREF(klassname);
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index efed1c0..44b20e2 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -55,38 +55,36 @@
 static PyObject *
 descr_repr(PyDescrObject *descr, char *format)
 {
-	char buffer[500];
-
-	sprintf(buffer, format, descr_name(descr), descr->d_type->tp_name);
-	return PyString_FromString(buffer);
+	return PyString_FromFormat(format, descr_name(descr),
+				   descr->d_type->tp_name);
 }
 
 static PyObject *
 method_repr(PyMethodDescrObject *descr)
 {
 	return descr_repr((PyDescrObject *)descr, 
-			  "<method '%.300s' of '%.100s' objects>");
+			  "<method '%s' of '%s' objects>");
 }
 
 static PyObject *
 member_repr(PyMemberDescrObject *descr)
 {
 	return descr_repr((PyDescrObject *)descr, 
-			  "<member '%.300s' of '%.100s' objects>");
+			  "<member '%s' of '%s' objects>");
 }
 
 static PyObject *
 getset_repr(PyGetSetDescrObject *descr)
 {
 	return descr_repr((PyDescrObject *)descr, 
-			  "<attribute '%.300s' of '%.100s' objects>");
+			  "<attribute '%s' of '%s' objects>");
 }
 
 static PyObject *
 wrapper_repr(PyWrapperDescrObject *descr)
 {
 	return descr_repr((PyDescrObject *)descr, 
-			  "<slot wrapper '%.300s' of '%.100s' objects>");
+			  "<slot wrapper '%s' of '%s' objects>");
 }
 
 static int
@@ -100,8 +98,8 @@
 	}
 	if (!PyObject_IsInstance(obj, (PyObject *)(descr->d_type))) {
 		PyErr_Format(PyExc_TypeError,
-			     "descriptor '%.200s' for '%.100s' objects "
-			     "doesn't apply to '%.100s' object",
+			     "descriptor '%s' for '%s' objects "
+			     "doesn't apply to '%s' object",
 			     descr_name((PyDescrObject *)descr),
 			     descr->d_type->tp_name,
 			     obj->ob_type->tp_name);
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index 0bb2f25..e18e2a2 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -179,13 +179,11 @@
 static PyObject *
 file_repr(PyFileObject *f)
 {
-	char buf[300];
-	sprintf(buf, "<%s file '%.256s', mode '%.10s' at %p>",
-		f->f_fp == NULL ? "closed" : "open",
-		PyString_AsString(f->f_name),
-		PyString_AsString(f->f_mode),
-		f);
-	return PyString_FromString(buf);
+	return PyString_FromFormat("<%s file '%s', mode '%s' at %p>",
+				   f->f_fp == NULL ? "closed" : "open",
+				   PyString_AsString(f->f_name),
+				   PyString_AsString(f->f_mode),
+				   f);
 }
 
 static PyObject *
diff --git a/Objects/funcobject.c b/Objects/funcobject.c
index 6532e58..6f56bf6 100644
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -239,14 +239,11 @@
 static PyObject*
 func_repr(PyFunctionObject *op)
 {
-	char buf[140];
 	if (op->func_name == Py_None)
-		sprintf(buf, "<anonymous function at %p>", op);
-	else
-		sprintf(buf, "<function %.100s at %p>",
-			PyString_AsString(op->func_name),
-			op);
-	return PyString_FromString(buf);
+		return PyString_FromFormat("<anonymous function at %p>", op);
+	return PyString_FromFormat("<function %s at %p>",
+				   PyString_AsString(op->func_name),
+				   op);
 }
 
 static int
diff --git a/Objects/methodobject.c b/Objects/methodobject.c
index cdba350..e766ba5 100644
--- a/Objects/methodobject.c
+++ b/Objects/methodobject.c
@@ -172,15 +172,13 @@
 static PyObject *
 meth_repr(PyCFunctionObject *m)
 {
-	char buf[200];
 	if (m->m_self == NULL)
-		sprintf(buf, "<built-in function %.80s>", m->m_ml->ml_name);
-	else
-		sprintf(buf,
-			"<built-in method %.80s of %.80s object at %p>",
-			m->m_ml->ml_name, m->m_self->ob_type->tp_name,
-			m->m_self);
-	return PyString_FromString(buf);
+		return PyString_FromFormat("<built-in function %s>",
+					   m->m_ml->ml_name);
+	return PyString_FromFormat("<built-in method %s of %s object at %p>",
+				   m->m_ml->ml_name,
+				   m->m_self->ob_type->tp_name,
+				   m->m_self);
 }
 
 static int
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c
index 2ccf0bf..ba81593 100644
--- a/Objects/moduleobject.c
+++ b/Objects/moduleobject.c
@@ -157,13 +157,8 @@
 static PyObject *
 module_repr(PyModuleObject *m)
 {
-	static int template1len = sizeof("<module '' (built-in)>") + 1;
-	static int template2len = sizeof("<module '' from ''>") + 1;
-
-	char *buf;
 	char *name;
 	char *filename;
-	PyObject *rtn;
 
 	name = PyModule_GetName((PyObject *)m);
 	if (name == NULL) {
@@ -173,19 +168,9 @@
 	filename = PyModule_GetFilename((PyObject *)m);
 	if (filename == NULL) {
 		PyErr_Clear();
-		buf = PyObject_MALLOC(
-			sizeof(char) * (strlen(name) + template1len));
-		sprintf(buf, "<module '%s' (built-in)>", name);
+		return PyString_FromFormat("<module '%s' (built-in)>", name);
 	}
-	else {
-		buf = PyObject_MALLOC(
-			sizeof(char) * (strlen(name) + strlen(filename) +
-					template2len));
-		sprintf(buf, "<module '%s' from '%s'>", name, filename);
-	}
-	rtn = PyString_FromString(buf);
-	PyObject_FREE(buf);
-	return rtn;
+	return PyString_FromFormat("<module '%s' from '%s'>", name, filename);
 }
 
 /* We only need a traverse function, no clear function: If the module
diff --git a/Objects/object.c b/Objects/object.c
index 7e4a211..1d62690 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -222,6 +222,7 @@
 }
 #endif /* WITH_CYCLE_GC */
 
+
 PyObject *
 PyObject_Repr(PyObject *v)
 {
@@ -235,12 +236,9 @@
 #endif
 	if (v == NULL)
 		return PyString_FromString("<NULL>");
-	else if (v->ob_type->tp_repr == NULL) {
-		char buf[120];
-		sprintf(buf, "<%.80s object at %p>",
-			v->ob_type->tp_name, v);
-		return PyString_FromString(buf);
-	}
+	else if (v->ob_type->tp_repr == NULL)
+		return PyString_FromFormat("<%s object at %p",
+					   v->ob_type->tp_name, v);
 	else {
 		PyObject *res;
 		res = (*v->ob_type->tp_repr)(v);
diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c
index 5ad86ed..24765f4 100644
--- a/Objects/rangeobject.c
+++ b/Objects/rangeobject.c
@@ -126,30 +126,30 @@
 static PyObject *
 range_repr(rangeobject *r)
 {
-	/* buffers must be big enough to hold 3 longs + an int +
-	 * a bit of "(xrange(...) * ...)" text.
-	 */
-	char buf1[250];
-	char buf2[250];
-
+	PyObject *rtn;
+	
 	if (r->start == 0 && r->step == 1)
-		sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
+		rtn = PyString_FromFormat("xrange(%ld)",
+					  r->start + r->len * r->step);
 
 	else if (r->step == 1)
-		sprintf(buf1, "xrange(%ld, %ld)",
-			r->start,
-			r->start + r->len * r->step);
+		rtn = PyString_FromFormat("xrange(%ld, %ld)",
+					  r->start,
+					  r->start + r->len * r->step);
 
 	else
-		sprintf(buf1, "xrange(%ld, %ld, %ld)",
-			r->start,
-			r->start + r->len * r->step,
-			r->step);
-
-	if (r->reps != 1)
-		sprintf(buf2, "(%s * %d)", buf1, r->reps);
-
-	return PyString_FromString(r->reps == 1 ? buf1 : buf2);
+		rtn = PyString_FromFormat("xrange(%ld, %ld, %ld)",
+					  r->start,
+					  r->start + r->len * r->step,
+					  r->step);
+	if (r->reps != 1) {
+		PyObject *extra = PyString_FromFormat(
+			"(%s * %d)",
+			PyString_AS_STRING(rtn), r->reps);
+		Py_DECREF(rtn);
+		rtn = extra;
+	}
+	return rtn;
 }
 
 static PyObject *
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index bf2bdc0..5cc4161 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -113,8 +113,7 @@
 static PyObject *
 type_repr(PyTypeObject *type)
 {
-	PyObject *mod, *name;
-	char buf[200];
+	PyObject *mod, *name, *rtn;
 
 	mod = type_module(type, NULL);
 	if (mod == NULL)
@@ -126,15 +125,18 @@
 	name = type_name(type, NULL);
 	if (name == NULL)
 		return NULL;
-	if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__"))
-		sprintf(buf, "<type '%.80s.%.80s'>",
-			PyString_AS_STRING(mod),
-			PyString_AS_STRING(name));
+
+	if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__")) {
+		rtn = PyString_FromFormat("<type '%s.%s'>",
+					  PyString_AS_STRING(mod),
+					  PyString_AS_STRING(name));
+	}
 	else
-		sprintf(buf, "<type '%.80s'>", type->tp_name);
+		rtn = PyString_FromFormat("<type '%s'>", type->tp_name);
+
 	Py_XDECREF(mod);
 	Py_DECREF(name);
-	return PyString_FromString(buf);
+	return rtn;
 }
 
 static PyObject *
@@ -968,8 +970,7 @@
 object_repr(PyObject *self)
 {
 	PyTypeObject *type;
-	PyObject *mod, *name;
-	char buf[200];
+	PyObject *mod, *name, *rtn;
 
 	type = self->ob_type;
 	mod = type_module(type, NULL);
@@ -983,15 +984,16 @@
 	if (name == NULL)
 		return NULL;
 	if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__"))
-		sprintf(buf, "<%.80s.%.80s instance at %p>",
-			PyString_AS_STRING(mod),
-			PyString_AS_STRING(name),
-			self);
+		rtn = PyString_FromFormat("<%s.%s instance at %p>",
+					  PyString_AS_STRING(mod),
+					  PyString_AS_STRING(name),
+					  self);
 	else
-		sprintf(buf, "<%.80s instance at %p>", type->tp_name, self);
+		rtn = PyString_FromFormat("<%s instance at %p>",
+					  type->tp_name, self);
 	Py_XDECREF(mod);
 	Py_DECREF(name);
-	return PyString_FromString(buf);
+	return rtn;
 }
 
 static PyObject *
@@ -2590,13 +2592,9 @@
 		Py_DECREF(func);
 		return res;
 	}
-	else {
-		char buf[120];
-		PyErr_Clear();
-		sprintf(buf, "<%.80s object at %p>",
-			self->ob_type->tp_name, self);
-		return PyString_FromString(buf);
-	}
+	PyErr_Clear();
+	return PyString_FromFormat("<%s object at %p>",
+				   self->ob_type->tp_name, self);
 }
 
 static PyObject *