diff options
author | Mike Pall <mike> | 2018-01-14 14:11:59 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2018-01-14 14:11:59 +0100 |
commit | 430d9f8f7ebb779948dbd43944b876b1a3f58551 (patch) | |
tree | 5a7f38d6e678834409b4df237104a3200240c8ae /src | |
parent | 7dbf0b05f1228c1c719866db5e5f3d58f87f74c8 (diff) | |
download | luajit-430d9f8f7ebb779948dbd43944b876b1a3f58551.tar.gz luajit-430d9f8f7ebb779948dbd43944b876b1a3f58551.tar.bz2 luajit-430d9f8f7ebb779948dbd43944b876b1a3f58551.zip |
Fix string.format("%c", 0).
Diffstat (limited to 'src')
-rw-r--r-- | src/lib_string.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/lib_string.c b/src/lib_string.c index d1a60b61..c1e595c9 100644 --- a/src/lib_string.c +++ b/src/lib_string.c | |||
@@ -850,20 +850,21 @@ LJLIB_CF(string_format) | |||
850 | } else { /* format item */ | 850 | } else { /* format item */ |
851 | char form[MAX_FMTSPEC]; /* to store the format (`%...') */ | 851 | char form[MAX_FMTSPEC]; /* to store the format (`%...') */ |
852 | char buff[MAX_FMTITEM]; /* to store the formatted item */ | 852 | char buff[MAX_FMTITEM]; /* to store the formatted item */ |
853 | int n = 0; | ||
853 | if (++arg > top) | 854 | if (++arg > top) |
854 | luaL_argerror(L, arg, lj_obj_typename[0]); | 855 | luaL_argerror(L, arg, lj_obj_typename[0]); |
855 | strfrmt = scanformat(L, strfrmt, form); | 856 | strfrmt = scanformat(L, strfrmt, form); |
856 | switch (*strfrmt++) { | 857 | switch (*strfrmt++) { |
857 | case 'c': | 858 | case 'c': |
858 | sprintf(buff, form, lj_lib_checkint(L, arg)); | 859 | n = sprintf(buff, form, lj_lib_checkint(L, arg)); |
859 | break; | 860 | break; |
860 | case 'd': case 'i': | 861 | case 'd': case 'i': |
861 | addintlen(form); | 862 | addintlen(form); |
862 | sprintf(buff, form, num2intfrm(L, arg)); | 863 | n = sprintf(buff, form, num2intfrm(L, arg)); |
863 | break; | 864 | break; |
864 | case 'o': case 'u': case 'x': case 'X': | 865 | case 'o': case 'u': case 'x': case 'X': |
865 | addintlen(form); | 866 | addintlen(form); |
866 | sprintf(buff, form, num2uintfrm(L, arg)); | 867 | n = sprintf(buff, form, num2uintfrm(L, arg)); |
867 | break; | 868 | break; |
868 | case 'e': case 'E': case 'f': case 'g': case 'G': case 'a': case 'A': { | 869 | case 'e': case 'E': case 'f': case 'g': case 'G': case 'a': case 'A': { |
869 | TValue tv; | 870 | TValue tv; |
@@ -880,10 +881,10 @@ LJLIB_CF(string_format) | |||
880 | nbuf[len] = '\0'; | 881 | nbuf[len] = '\0'; |
881 | for (p = form; *p < 'A' && *p != '.'; p++) ; | 882 | for (p = form; *p < 'A' && *p != '.'; p++) ; |
882 | *p++ = 's'; *p = '\0'; | 883 | *p++ = 's'; *p = '\0'; |
883 | sprintf(buff, form, nbuf); | 884 | n = sprintf(buff, form, nbuf); |
884 | break; | 885 | break; |
885 | } | 886 | } |
886 | sprintf(buff, form, (double)tv.n); | 887 | n = sprintf(buff, form, (double)tv.n); |
887 | break; | 888 | break; |
888 | } | 889 | } |
889 | case 'q': | 890 | case 'q': |
@@ -902,14 +903,14 @@ LJLIB_CF(string_format) | |||
902 | luaL_addvalue(&b); | 903 | luaL_addvalue(&b); |
903 | continue; | 904 | continue; |
904 | } | 905 | } |
905 | sprintf(buff, form, strdata(str)); | 906 | n = sprintf(buff, form, strdata(str)); |
906 | break; | 907 | break; |
907 | } | 908 | } |
908 | default: | 909 | default: |
909 | lj_err_callerv(L, LJ_ERR_STRFMTO, *(strfrmt -1)); | 910 | lj_err_callerv(L, LJ_ERR_STRFMTO, *(strfrmt -1)); |
910 | break; | 911 | break; |
911 | } | 912 | } |
912 | luaL_addlstring(&b, buff, strlen(buff)); | 913 | luaL_addlstring(&b, buff, n); |
913 | } | 914 | } |
914 | } | 915 | } |
915 | luaL_pushresult(&b); | 916 | luaL_pushresult(&b); |