@@ -850,20 +850,21 @@ LJLIB_CF(string_format)
850850 } else { /* format item */
851851 char form [MAX_FMTSPEC ]; /* to store the format (`%...') */
852852 char buff [MAX_FMTITEM ]; /* to store the formatted item */
853+ int n = 0 ;
853854 if (++ arg > top )
854855 luaL_argerror (L , arg , lj_obj_typename [0 ]);
855856 strfrmt = scanformat (L , strfrmt , form );
856857 switch (* strfrmt ++ ) {
857858 case 'c' :
858- sprintf (buff , form , lj_lib_checkint (L , arg ));
859+ n = sprintf (buff , form , lj_lib_checkint (L , arg ));
859860 break ;
860861 case 'd' : case 'i' :
861862 addintlen (form );
862- sprintf (buff , form , num2intfrm (L , arg ));
863+ n = sprintf (buff , form , num2intfrm (L , arg ));
863864 break ;
864865 case 'o' : case 'u' : case 'x' : case 'X' :
865866 addintlen (form );
866- sprintf (buff , form , num2uintfrm (L , arg ));
867+ n = sprintf (buff , form , num2uintfrm (L , arg ));
867868 break ;
868869 case 'e' : case 'E' : case 'f' : case 'g' : case 'G' : case 'a' : case 'A' : {
869870 TValue tv ;
@@ -880,10 +881,10 @@ LJLIB_CF(string_format)
880881 nbuf [len ] = '\0' ;
881882 for (p = form ; * p < 'A' && * p != '.' ; p ++ ) ;
882883 * p ++ = 's' ; * p = '\0' ;
883- sprintf (buff , form , nbuf );
884+ n = sprintf (buff , form , nbuf );
884885 break ;
885886 }
886- sprintf (buff , form , (double )tv .n );
887+ n = sprintf (buff , form , (double )tv .n );
887888 break ;
888889 }
889890 case 'q' :
@@ -902,14 +903,14 @@ LJLIB_CF(string_format)
902903 luaL_addvalue (& b );
903904 continue ;
904905 }
905- sprintf (buff , form , strdata (str ));
906+ n = sprintf (buff , form , strdata (str ));
906907 break ;
907908 }
908909 default :
909910 lj_err_callerv (L , LJ_ERR_STRFMTO , * (strfrmt - 1 ));
910911 break ;
911912 }
912- luaL_addlstring (& b , buff , strlen ( buff ) );
913+ luaL_addlstring (& b , buff , n );
913914 }
914915 }
915916 luaL_pushresult (& b );
0 commit comments