@@ -158,24 +158,23 @@ php_sprintf_appendstring(char **buffer, int *pos, int *size, char *add,
158
158
int alignment , int len , int sign , int expprec )
159
159
{
160
160
register int npad ;
161
+ int req_size ;
162
+ int copy_len ;
161
163
162
- if (max_width && min_width ) {
163
- expprec = max_width = 0 ;
164
- }
165
-
166
- npad = min_width - MIN (len , (expprec ? max_width : len ));
164
+ copy_len = (expprec ? MIN (max_width , len ) : len );
165
+ npad = min_width - copy_len ;
167
166
168
167
if (npad < 0 ) {
169
168
npad = 0 ;
170
169
}
171
170
172
171
PRINTF_DEBUG (("sprintf: appendstring(%x, %d, %d, \"%s\", %d, '%c', %d)\n" ,
173
172
* buffer , * pos , * size , add , min_width , padding , alignment ));
174
- if (( max_width == 0 ) && (! expprec )) {
175
- max_width = MAX (min_width , len ) ;
176
- }
177
- if (( * pos + max_width ) >= * size ) {
178
- while (( * pos + max_width ) >= * size ) {
173
+
174
+ req_size = * pos + MAX (min_width , copy_len ) + 1 ;
175
+
176
+ if (req_size > * size ) {
177
+ while (req_size > * size ) {
179
178
* size <<= 1 ;
180
179
}
181
180
PRINTF_DEBUG (("sprintf ereallocing buffer to %d bytes\n" , * size ));
@@ -192,8 +191,8 @@ php_sprintf_appendstring(char **buffer, int *pos, int *size, char *add,
192
191
}
193
192
}
194
193
PRINTF_DEBUG (("sprintf: appending \"%s\"\n" , add ));
195
- memcpy (& (* buffer )[* pos ], add , MIN ( max_width , len ) + 1 );
196
- * pos += MIN ( max_width , len ) ;
194
+ memcpy (& (* buffer )[* pos ], add , copy_len + 1 );
195
+ * pos += copy_len ;
197
196
if (alignment == ALIGN_LEFT ) {
198
197
while (npad -- ) {
199
198
(* buffer )[(* pos )++ ] = padding ;
0 commit comments