@@ -254,9 +254,14 @@ yajl_gen_status
254
254
yajl_gen_integer (yajl_gen g , long long int number )
255
255
{
256
256
char i [32 ];
257
+ int len ;
258
+
257
259
ENSURE_VALID_STATE ; ENSURE_NOT_KEY ; INSERT_SEP ; INSERT_WHITESPACE ;
258
- sprintf (i , "%lld" , number );
259
- g -> print (g -> ctx , i , (size_t )strlen (i ));
260
+ len = sprintf (i , "%lld" , number );
261
+ if (len < 0 ) { /* highly unlikely, perhaps impossible */
262
+ return yajl_gen_invalid_number ;
263
+ }
264
+ g -> print (g -> ctx , i , (size_t ) len );
260
265
APPENDED_ATOM ;
261
266
FINAL_NEWLINE ;
262
267
return yajl_gen_status_ok ;
@@ -285,22 +290,28 @@ yajl_gen_status
285
290
yajl_gen_double (yajl_gen g , double number )
286
291
{
287
292
char i [32 ];
293
+ int len ;
294
+
288
295
ENSURE_VALID_STATE ; ENSURE_NOT_KEY ;
289
296
if (isnan (number ) || isinf (number )) return yajl_gen_invalid_number ;
290
297
INSERT_SEP ; INSERT_WHITESPACE ;
291
- sprintf (i , "%.*g" , DBL_DIG , number ); /* xxx in theory we could/should use
292
- * DBL_DECIMAL_DIG for pure
293
- * serialization, but what about to
294
- * JSON readers that might not be using
295
- * IEEE 754 binary64 for numbers? */
298
+ len = sprintf (i , "%.*g" , DBL_DIG , number ); /* xxx in theory we could/should
299
+ * use DBL_DECIMAL_DIG for pure
300
+ * serialization, but what about
301
+ * to JSON readers that might not
302
+ * be using IEEE 754 binary64 for
303
+ * numbers? */
304
+ if (len < 0 ) { /* highly unlikely, or even impossible? */
305
+ return yajl_gen_invalid_number ;
306
+ }
296
307
/*
297
- * xxx perhaps this should be controlled by a runtime-configurable
298
- * option?
308
+ * xxx perhaps forcing decimal notation should be controlled by a
309
+ * runtime-configurable option?
299
310
*/
300
311
if (strspn (i , "0123456789-" ) == strlen (i )) {
301
312
strcat (i , ".0" );
302
313
}
303
- g -> print (g -> ctx , i , (size_t )strlen ( i ) );
314
+ g -> print (g -> ctx , i , (size_t ) len );
304
315
APPENDED_ATOM ;
305
316
FINAL_NEWLINE ;
306
317
return yajl_gen_status_ok ;
0 commit comments