From: Tim Peters <tim.peters@gmail.com>
Date: Sat, 25 Aug 2001 03:02:28 +0000 (+0000)
Subject: PyString_FromFormatV:  Massage platform %p output to match what gcc does,
X-Git-Tag: v2.2a3~326
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6af5bbb5653a9b77102369d60fb18d3bc896bf92;p=python

PyString_FromFormatV:  Massage platform %p output to match what gcc does,
at least in the first two characters.  %p is ill-defined, and people will
forever commit bad tests otherwise ("bad" in the sense that they fall
over (at least on Windows) for lack of a leading '0x'; 5 of the 7 tests
in test_repr.py failed on Windows for that reason this time around).
---

diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 3acc69f9b0..9ea32a203d 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -269,6 +269,14 @@ PyString_FromFormatV(const char *format, va_list vargs)
 				break;
 			case 'p':
 				sprintf(s, "%p", va_arg(vargs, void*));
+				/* %p is ill-defined:  ensure leading 0x. */
+				if (s[1] == 'X')
+					s[1] = 'x';
+				else if (s[1] != 'x') {
+					memmove(s+2, s, strlen(s)+1);
+					s[0] = '0';
+					s[1] = 'x';
+				}
 				s += strlen(s);
 				break;
 			case '%':