aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2018-01-14 14:11:59 +0100
committerMike Pall <mike>2018-01-14 14:11:59 +0100
commit430d9f8f7ebb779948dbd43944b876b1a3f58551 (patch)
tree5a7f38d6e678834409b4df237104a3200240c8ae /src
parent7dbf0b05f1228c1c719866db5e5f3d58f87f74c8 (diff)
downloadluajit-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.c15
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);