diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2006-09-18 13:33:14 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2006-09-18 13:33:14 -0300 |
commit | 93d3c8450c7a78321cf7f9db9173d46c62ebe958 (patch) | |
tree | ba2626af9edbf90afdb02edb836020c693742d99 | |
parent | 8667f29c3b9e56fb6bd4f9de8c096e0331be555d (diff) | |
download | lua-93d3c8450c7a78321cf7f9db9173d46c62ebe958.tar.gz lua-93d3c8450c7a78321cf7f9db9173d46c62ebe958.tar.bz2 lua-93d3c8450c7a78321cf7f9db9173d46c62ebe958.zip |
bug: string.format("%") reads past the string
-rw-r--r-- | bugs | 54 | ||||
-rw-r--r-- | lstrlib.c | 4 |
2 files changed, 56 insertions, 2 deletions
@@ -798,6 +798,32 @@ patch = [[ | |||
798 | } | 798 | } |
799 | 799 | ||
800 | 800 | ||
801 | Bug{ | ||
802 | what = [[Some "not not exp" may not result in boolean values]], | ||
803 | report = [[]], | ||
804 | since = [[4.0]], | ||
805 | example = [[ | ||
806 | -- should print false, but prints nil | ||
807 | print(not not (nil and 4)) | ||
808 | ]], | ||
809 | patch = [[]], | ||
810 | } | ||
811 | |||
812 | |||
813 | Bug{ | ||
814 | what = [[On some machines, closing a "piped file" (created with io.popen) | ||
815 | may crash Lua]], | ||
816 | report = [[]], | ||
817 | since = [[5.0]], | ||
818 | example = [[ | ||
819 | -- only on some machines | ||
820 | f = io.popen("ls") | ||
821 | f:close() | ||
822 | ]], | ||
823 | patch = [[]], | ||
824 | } | ||
825 | |||
826 | |||
801 | 827 | ||
802 | ----------------------------------------------------------------- | 828 | ----------------------------------------------------------------- |
803 | -- Lua 5.1 | 829 | -- Lua 5.1 |
@@ -1095,3 +1121,31 @@ patch = [[ | |||
1095 | ]], | 1121 | ]], |
1096 | 1122 | ||
1097 | } | 1123 | } |
1124 | |||
1125 | |||
1126 | Bug{ | ||
1127 | what = [[string.format("%") reads past the string]], | ||
1128 | report = [[Roberto, on 09/2006]], | ||
1129 | since = [[5.0 (at least)]], | ||
1130 | example = [[print(string.format("%"))]], | ||
1131 | patch = [[ | ||
1132 | *lstrlib.c: | ||
1133 | @@ -723,7 +723,7 @@ | ||
1134 | |||
1135 | static const char *scanformat (lua_State *L, const char *strfrmt, char *form) { const char *p = strfrmt; | ||
1136 | - while (strchr(FLAGS, *p)) p++; /* skip flags */ | ||
1137 | + while (*p != '\0' && strchr(FLAGS, *p) != NULL) p++; /* skip flags */ | ||
1138 | if ((size_t)(p - strfrmt) >= sizeof(FLAGS)) | ||
1139 | luaL_error(L, "invalid format (repeated flags)"); | ||
1140 | if (isdigit(uchar(*p))) p++; /* skip width */ | ||
1141 | ]], | ||
1142 | } | ||
1143 | |||
1144 | |||
1145 | Bug{ | ||
1146 | what = [[ ]], | ||
1147 | report = [[ ]], | ||
1148 | since = [[ ]], | ||
1149 | example = [[ ]], | ||
1150 | patch = [[ ]], | ||
1151 | } | ||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lstrlib.c,v 1.133 2006/06/22 16:12:59 roberto Exp roberto $ | 2 | ** $Id: lstrlib.c,v 1.134 2006/09/11 14:07:24 roberto Exp roberto $ |
3 | ** Standard library for string operations and pattern-matching | 3 | ** Standard library for string operations and pattern-matching |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -723,7 +723,7 @@ static void addquoted (lua_State *L, luaL_Buffer *b, int arg) { | |||
723 | 723 | ||
724 | static const char *scanformat (lua_State *L, const char *strfrmt, char *form) { | 724 | static const char *scanformat (lua_State *L, const char *strfrmt, char *form) { |
725 | const char *p = strfrmt; | 725 | const char *p = strfrmt; |
726 | while (strchr(FLAGS, *p)) p++; /* skip flags */ | 726 | while (*p != '\0' && strchr(FLAGS, *p) != NULL) p++; /* skip flags */ |
727 | if ((size_t)(p - strfrmt) >= sizeof(FLAGS)) | 727 | if ((size_t)(p - strfrmt) >= sizeof(FLAGS)) |
728 | luaL_error(L, "invalid format (repeated flags)"); | 728 | luaL_error(L, "invalid format (repeated flags)"); |
729 | if (isdigit(uchar(*p))) p++; /* skip width */ | 729 | if (isdigit(uchar(*p))) p++; /* skip width */ |