summaryrefslogtreecommitdiff
path: root/bugs
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2007-02-09 10:39:52 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2007-02-09 10:39:52 -0200
commit3bf0292cd5949d05b42ad474ca00d1c004ee9471 (patch)
tree4b8e39c75d5fd1841516a8218d109d6396373ec4 /bugs
parenta7861d9d666adcb629958da8131fc6a86c1b97d6 (diff)
downloadlua-github-3bf0292cd5949d05b42ad474ca00d1c004ee9471.tar.gz
two new bugs + one new patch
Diffstat (limited to 'bugs')
-rw-r--r--bugs111
1 files changed, 108 insertions, 3 deletions
diff --git a/bugs b/bugs
index a489872f..57eef557 100644
--- a/bugs
+++ b/bugs
@@ -1124,7 +1124,7 @@ patch = [[
Bug{
-what = [[string.format("%") reads past the string]],
+what = [[string.format("%") may read past the string]],
report = [[Roberto, on 09/2006]],
since = [[5.0 (at least)]],
example = [[print(string.format("%"))]],
@@ -1144,17 +1144,122 @@ patch = [[
Bug{
what = [[os.date throws an error when result is the empty string]],
-report = [[ ]],
+report = [[]],
since = [[4.0]],
example = [[print(os.date(""))]],
-patch = [[ ]],
+patch = [[
+*loslib.c:
+@@ -148,7 +148,18 @@
+ else {
+- char b[256];
+- if (strftime(b, sizeof(b), s, stm))
+- lua_pushstring(L, b);
+- else
+- return luaL_error(L, LUA_QL("date") " format too long");
++ char cc[3];
++ luaL_Buffer b;
++ cc[0] = '%'; cc[2] = '\0';
++ luaL_buffinit(L, &b);
++ for (; *s; s++) {
++ if (*s != '%' || *(s + 1) == '\0') /* no conversion specifier? */
++ luaL_addchar(&b, *s);
++ else {
++ size_t reslen;
++ char buff[200]; /* should be big enough for any conversion result */
++ cc[1] = *(++s);
++ reslen = strftime(buff, sizeof(buff), cc, stm);
++ luaL_addlstring(&b, buff, reslen);
++ }
++ }
++ luaL_pushresult(&b);
+ }
+]],
}
Bug{
+what = [[setfenv accepts invalid 1st argument]],
+report = [[Doug Rogers, on 02/2007]],
+since = [[5.0]],
+example = [[setfenv(nil, {}) -- should throw an error]],
+patch = [[
+*lbaselib.c:
+@@ -116,3 +116,3 @@
+
+-static void getfunc (lua_State *L) {
++static void getfunc (lua_State *L, int opt) {
+ if (lua_isfunction(L, 1)) lua_pushvalue(L, 1);
+@@ -120,3 +120,3 @@
+ lua_Debug ar;
+- int level = luaL_optint(L, 1, 1);
++ int level = opt ? luaL_optint(L, 1, 1) : luaL_checkint(L, 1);
+ luaL_argcheck(L, level >= 0, 1, "level must be non-negative");
+@@ -133,3 +133,3 @@
+ static int luaB_getfenv (lua_State *L) {
+- getfunc(L);
++ getfunc(L, 1);
+ if (lua_iscfunction(L, -1)) /* is a C function? */
+@@ -144,3 +144,3 @@
+ luaL_checktype(L, 2, LUA_TTABLE);
+- getfunc(L);
++ getfunc(L, 0);
+ lua_pushvalue(L, 2);
+]],
+}
+
+
+Bug{
+what = [[wrong code for arithmetic expressions in some specific scenarios]],
+report = [[Thierry Grellier, on 01/2007]],
+since = [[5.1]],
+example = [[
+-- use a large number of names (almost 256)
+v1=1; v2=1; v3=1; v4=1; v5=1; v6=1; v7=1; v8=1; v9=1;
+v10=1; v11=1; v12=1; v13=1; v14=1; v15=1; v16=1; v17=1;
+v18=1; v19=1; v20=1; v21=1; v22=1; v23=1; v24=1; v25=1;
+v26=1; v27=1; v28=1; v29=1; v30=1; v31=1; v32=1; v33=1;
+v34=1; v35=1; v36=1; v37=1; v38=1; v39=1; v40=1; v41=1;
+v42=1; v43=1; v44=1; v45=1; v46=1; v47=1; v48=1; v49=1;
+v50=1; v51=1; v52=1; v53=1; v54=1; v55=1; v56=1; v57=1;
+v58=1; v59=1; v60=1; v61=1; v62=1; v63=1; v64=1; v65=1;
+v66=1; v67=1; v68=1; v69=1; v70=1; v71=1; v72=1; v73=1;
+v74=1; v75=1; v76=1; v77=1; v78=1; v79=1; v80=1; v81=1;
+v82=1; v83=1; v84=1; v85=1; v86=1; v87=1; v88=1; v89=1;
+v90=1; v91=1; v92=1; v93=1; v94=1; v95=1; v96=1; v97=1;
+v98=1; v99=1; v100=1; v101=1; v102=1; v103=1; v104=1; v105=1;
+v106=1; v107=1; v108=1; v109=1; v110=1; v111=1; v112=1; v113=1;
+v114=1; v115=1; v116=1; v117=1; v118=1; v119=1; v120=1; v121=1;
+v122=1; v123=1; v124=1; v125=1; v126=1; v127=1; v128=1; v129=1;
+v130=1; v131=1; v132=1; v133=1; v134=1; v135=1; v136=1; v137=1;
+v138=1; v139=1; v140=1; v141=1; v142=1; v143=1; v144=1; v145=1;
+v146=1; v147=1; v148=1; v149=1; v150=1; v151=1; v152=1; v153=1;
+v154=1; v155=1; v156=1; v157=1; v158=1; v159=1; v160=1; v161=1;
+v162=1; v163=1; v164=1; v165=1; v166=1; v167=1; v168=1; v169=1;
+v170=1; v171=1; v172=1; v173=1; v174=1; v175=1; v176=1; v177=1;
+v178=1; v179=1; v180=1; v181=1; v182=1; v183=1; v184=1; v185=1;
+v186=1; v187=1; v188=1; v189=1; v190=1; v191=1; v192=1; v193=1;
+v194=1; v195=1; v196=1; v197=1; v198=1; v199=1; v200=1; v201=1;
+v202=1; v203=1; v204=1; v205=1; v206=1; v207=1; v208=1; v209=1;
+v210=1; v211=1; v212=1; v213=1; v214=1; v215=1; v216=1; v217=1;
+v218=1; v219=1; v220=1; v221=1; v222=1; v223=1; v224=1; v225=1;
+v226=1; v227=1; v228=1; v229=1; v230=1; v231=1; v232=1; v233=1;
+v234=1; v235=1; v236=1; v237=1; v238=1; v239=1; v240=1; v241=1;
+v242=1; v243=1; v244=1; v245=1; v246=1; v247=1; v248=1; v249=1;
+v250=1;
+v251={k1 = 1};
+v252=1;
+print(2 * v251.k1, v251.k1 * 2); -- 2 2, OK
+v253=1;
+print(2 * v251.k1, v251.k1 * 2); -- 1 2, ???
+]],
+patch = [[no patch yet]],
+}
+
+Bug{
what = [[ ]],
report = [[ ]],
since = [[ ]],
example = [[ ]],
patch = [[ ]],
}
+