aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib_string.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/lib_string.c b/src/lib_string.c
index 3dac9d37..89ec4f25 100644
--- a/src/lib_string.c
+++ b/src/lib_string.c
@@ -780,20 +780,20 @@ LJLIB_CF(string_format)
780 addintlen(form); 780 addintlen(form);
781 sprintf(buff, form, num2uintfrm(L, arg)); 781 sprintf(buff, form, num2uintfrm(L, arg));
782 break; 782 break;
783 case 'e': case 'E': case 'f': case 'g': case 'G': { 783 case 'e': case 'E': case 'f': case 'g': case 'G': case 'a': case 'A': {
784 TValue tv; 784 TValue tv;
785 tv.n = lj_lib_checknum(L, arg); 785 tv.n = lj_lib_checknum(L, arg);
786 if (LJ_UNLIKELY((tv.u32.hi << 1) >= 0xffe00000)) { 786 if (LJ_UNLIKELY((tv.u32.hi << 1) >= 0xffe00000)) {
787 /* Canonicalize output of non-finite values. */ 787 /* Canonicalize output of non-finite values. */
788 char *p, nbuf[LJ_STR_NUMBUF]; 788 char *p, nbuf[LJ_STR_NUMBUF];
789 size_t len = lj_str_bufnum(nbuf, &tv); 789 size_t len = lj_str_bufnum(nbuf, &tv);
790 if (strfrmt[-1] == 'E' || strfrmt[-1] == 'G') { 790 if (strfrmt[-1] < 'a') {
791 nbuf[len-3] = nbuf[len-3] - 0x20; 791 nbuf[len-3] = nbuf[len-3] - 0x20;
792 nbuf[len-2] = nbuf[len-2] - 0x20; 792 nbuf[len-2] = nbuf[len-2] - 0x20;
793 nbuf[len-1] = nbuf[len-1] - 0x20; 793 nbuf[len-1] = nbuf[len-1] - 0x20;
794 } 794 }
795 nbuf[len] = '\0'; 795 nbuf[len] = '\0';
796 for (p = form; *p < 'e' && *p != '.'; p++) ; 796 for (p = form; *p < 'A' && *p != '.'; p++) ;
797 *p++ = 's'; *p = '\0'; 797 *p++ = 's'; *p = '\0';
798 sprintf(buff, form, nbuf); 798 sprintf(buff, form, nbuf);
799 break; 799 break;