github.com/shawnclovie/gopher-lua@v0.0.0-20200520092726-90b44ec0e2f2/_lua5.1-tests/big.lua (about)

     1  print "testing string length overflow"
     2  
     3  local longs = string.rep("\0", 2^25)
     4  local function catter (i)
     5    return assert(loadstring(
     6      string.format("return function(a) return a%s end",
     7                       string.rep("..a", i-1))))()
     8  end
     9  rep129 = catter(129)
    10  local a, b = pcall(rep129, longs)
    11  print(b)
    12  assert(not a and string.find(b, "overflow"))
    13  print('+')
    14  
    15  
    16  require "checktable"
    17  
    18  --[[ lots of empty lines (to force SETLINEW)
    19  
    20  
    21  
    22  
    23  
    24  
    25  
    26  
    27  
    28  
    29  
    30  
    31  
    32  
    33  
    34  
    35  
    36  
    37  
    38  
    39  
    40  
    41  
    42  
    43  
    44  
    45  
    46  
    47  
    48  
    49  
    50  
    51  
    52  
    53  
    54  
    55  
    56  
    57  
    58  
    59  
    60  
    61  
    62  
    63  
    64  
    65  
    66  
    67  
    68  
    69  
    70  
    71  
    72  
    73  
    74  
    75  
    76  
    77  
    78  
    79  
    80  
    81  
    82  
    83  
    84  
    85  
    86  
    87  
    88  
    89  
    90  
    91  
    92  
    93  
    94  
    95  
    96  
    97  
    98  
    99  
   100  
   101  
   102  
   103  
   104  
   105  
   106  
   107  
   108  
   109  
   110  
   111  
   112  
   113  
   114  
   115  
   116  
   117  
   118  
   119  
   120  
   121  
   122  
   123  
   124  
   125  
   126  
   127  
   128  
   129  
   130  
   131  
   132  
   133  
   134  
   135  
   136  
   137  
   138  
   139  
   140  
   141  
   142  
   143  
   144  
   145  
   146  
   147  
   148  
   149  
   150  
   151  
   152  
   153  
   154  
   155  
   156  
   157  
   158  
   159  
   160  
   161  
   162  
   163  
   164  
   165  
   166  
   167  
   168  
   169  
   170  
   171  
   172  
   173  
   174  
   175  
   176  
   177  
   178  
   179  
   180  
   181  
   182  
   183  
   184  
   185  
   186  
   187  
   188  
   189  
   190  
   191  
   192  
   193  
   194  
   195  
   196  
   197  
   198  
   199  
   200  
   201  
   202  
   203  
   204  
   205  
   206  
   207  
   208  
   209  
   210  
   211  
   212  
   213  
   214  
   215  
   216  
   217  
   218  
   219  
   220  
   221  
   222  --]]
   223  
   224  
   225  a,b = nil,nil
   226  while not b do
   227  if a then
   228  b = {  -- lots of strings (to force JMPW and PUSHCONSTANTW)
   229  "n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9", "n10",
   230  "n11", "n12", "j301", "j302", "j303", "j304", "j305", "j306", "j307", "j308",
   231  "j309", "a310", "n311", "n312", "n313", "n314", "n315", "n316", "n317", "n318",
   232  "n319", "n320", "n321", "n322", "n323", "n324", "n325", "n326", "n327", "n328",
   233  "a329", "n330", "n331", "n332", "n333", "n334", "n335", "n336", "n337", "n338",
   234  "n339", "n340", "n341", "z342", "n343", "n344", "n345", "n346", "n347", "n348",
   235  "n349", "n350", "n351", "n352", "r353", "n354", "n355", "n356", "n357", "n358",
   236  "n359", "n360", "n361", "n362", "n363", "n364", "n365", "n366", "z367", "n368",
   237  "n369", "n370", "n371", "n372", "n373", "n374", "n375", "a376", "n377", "n378",
   238  "n379", "n380", "n381", "n382", "n383", "n384", "n385", "n386", "n387", "n388",
   239  "n389", "n390", "n391", "n392", "n393", "n394", "n395", "n396", "n397", "n398",
   240  "n399", "n400", "n13", "n14", "n15", "n16", "n17", "n18", "n19", "n20",
   241  "n21", "n22", "n23", "a24", "n25", "n26", "n27", "n28", "n29", "j30",
   242  "n31", "n32", "n33", "n34", "n35", "n36", "n37", "n38", "n39", "n40",
   243  "n41", "n42", "n43", "n44", "n45", "n46", "n47", "n48", "n49", "n50",
   244  "n51", "n52", "n53", "n54", "n55", "n56", "n57", "n58", "n59", "n60",
   245  "n61", "n62", "n63", "n64", "n65", "a66", "z67", "n68", "n69", "n70",
   246  "n71", "n72", "n73", "n74", "n75", "n76", "n77", "n78", "n79", "n80",
   247  "n81", "n82", "n83", "n84", "n85", "n86", "n87", "n88", "n89", "n90",
   248  "n91", "n92", "n93", "n94", "n95", "n96", "n97", "n98", "n99", "n100",
   249  "n201", "n202", "n203", "n204", "n205", "n206", "n207", "n208", "n209", "n210",
   250  "n211", "n212", "n213", "n214", "n215", "n216", "n217", "n218", "n219", "n220",
   251  "n221", "n222", "n223", "n224", "n225", "n226", "n227", "n228", "n229", "n230",
   252  "n231", "n232", "n233", "n234", "n235", "n236", "n237", "n238", "n239", "a240",
   253  "a241", "a242", "a243", "a244", "a245", "a246", "a247", "a248", "a249", "n250",
   254  "n251", "n252", "n253", "n254", "n255", "n256", "n257", "n258", "n259", "n260",
   255  "n261", "n262", "n263", "n264", "n265", "n266", "n267", "n268", "n269", "n270",
   256  "n271", "n272", "n273", "n274", "n275", "n276", "n277", "n278", "n279", "n280",
   257  "n281", "n282", "n283", "n284", "n285", "n286", "n287", "n288", "n289", "n290",
   258  "n291", "n292", "n293", "n294", "n295", "n296", "n297", "n298", "n299"
   259  ; x=23}
   260  else a = 1 end
   261  
   262  
   263  end
   264  
   265  assert(b.x == 23)
   266  print('+')
   267  
   268  stat(b)
   269  
   270  repeat
   271  a = {
   272  n1 = 1.5, n2 = 2.5, n3 = 3.5, n4 = 4.5, n5 = 5.5, n6 = 6.5, n7 = 7.5,
   273  n8 = 8.5, n9 = 9.5, n10 = 10.5, n11 = 11.5, n12 = 12.5,
   274  j301 = 301.5, j302 = 302.5, j303 = 303.5, j304 = 304.5, j305 = 305.5,
   275  j306 = 306.5, j307 = 307.5, j308 = 308.5, j309 = 309.5, a310 = 310.5,
   276  n311 = 311.5, n312 = 312.5, n313 = 313.5, n314 = 314.5, n315 = 315.5,
   277  n316 = 316.5, n317 = 317.5, n318 = 318.5, n319 = 319.5, n320 = 320.5,
   278  n321 = 321.5, n322 = 322.5, n323 = 323.5, n324 = 324.5, n325 = 325.5,
   279  n326 = 326.5, n327 = 327.5, n328 = 328.5, a329 = 329.5, n330 = 330.5,
   280  n331 = 331.5, n332 = 332.5, n333 = 333.5, n334 = 334.5, n335 = 335.5,
   281  n336 = 336.5, n337 = 337.5, n338 = 338.5, n339 = 339.5, n340 = 340.5,
   282  n341 = 341.5, z342 = 342.5, n343 = 343.5, n344 = 344.5, n345 = 345.5,
   283  n346 = 346.5, n347 = 347.5, n348 = 348.5, n349 = 349.5, n350 = 350.5,
   284  n351 = 351.5, n352 = 352.5, r353 = 353.5, n354 = 354.5, n355 = 355.5,
   285  n356 = 356.5, n357 = 357.5, n358 = 358.5, n359 = 359.5, n360 = 360.5,
   286  n361 = 361.5, n362 = 362.5, n363 = 363.5, n364 = 364.5, n365 = 365.5,
   287  n366 = 366.5, z367 = 367.5, n368 = 368.5, n369 = 369.5, n370 = 370.5,
   288  n371 = 371.5, n372 = 372.5, n373 = 373.5, n374 = 374.5, n375 = 375.5,
   289  a376 = 376.5, n377 = 377.5, n378 = 378.5, n379 = 379.5, n380 = 380.5,
   290  n381 = 381.5, n382 = 382.5, n383 = 383.5, n384 = 384.5, n385 = 385.5,
   291  n386 = 386.5, n387 = 387.5, n388 = 388.5, n389 = 389.5, n390 = 390.5,
   292  n391 = 391.5, n392 = 392.5, n393 = 393.5, n394 = 394.5, n395 = 395.5,
   293  n396 = 396.5, n397 = 397.5, n398 = 398.5, n399 = 399.5, n400 = 400.5,
   294  n13 = 13.5, n14 = 14.5, n15 = 15.5, n16 = 16.5, n17 = 17.5,
   295  n18 = 18.5, n19 = 19.5, n20 = 20.5, n21 = 21.5, n22 = 22.5,
   296  n23 = 23.5, a24 = 24.5, n25 = 25.5, n26 = 26.5, n27 = 27.5,
   297  n28 = 28.5, n29 = 29.5, j30 = 30.5, n31 = 31.5, n32 = 32.5,
   298  n33 = 33.5, n34 = 34.5, n35 = 35.5, n36 = 36.5, n37 = 37.5,
   299  n38 = 38.5, n39 = 39.5, n40 = 40.5, n41 = 41.5, n42 = 42.5,
   300  n43 = 43.5, n44 = 44.5, n45 = 45.5, n46 = 46.5, n47 = 47.5,
   301  n48 = 48.5, n49 = 49.5, n50 = 50.5, n51 = 51.5, n52 = 52.5,
   302  n53 = 53.5, n54 = 54.5, n55 = 55.5, n56 = 56.5, n57 = 57.5,
   303  n58 = 58.5, n59 = 59.5, n60 = 60.5, n61 = 61.5, n62 = 62.5,
   304  n63 = 63.5, n64 = 64.5, n65 = 65.5, a66 = 66.5, z67 = 67.5,
   305  n68 = 68.5, n69 = 69.5, n70 = 70.5, n71 = 71.5, n72 = 72.5,
   306  n73 = 73.5, n74 = 74.5, n75 = 75.5, n76 = 76.5, n77 = 77.5,
   307  n78 = 78.5, n79 = 79.5, n80 = 80.5, n81 = 81.5, n82 = 82.5,
   308  n83 = 83.5, n84 = 84.5, n85 = 85.5, n86 = 86.5, n87 = 87.5,
   309  n88 = 88.5, n89 = 89.5, n90 = 90.5, n91 = 91.5, n92 = 92.5,
   310  n93 = 93.5, n94 = 94.5, n95 = 95.5, n96 = 96.5, n97 = 97.5,
   311  n98 = 98.5, n99 = 99.5, n100 = 100.5, n201 = 201.5, n202 = 202.5,
   312  n203 = 203.5, n204 = 204.5, n205 = 205.5, n206 = 206.5, n207 = 207.5,
   313  n208 = 208.5, n209 = 209.5, n210 = 210.5, n211 = 211.5, n212 = 212.5,
   314  n213 = 213.5, n214 = 214.5, n215 = 215.5, n216 = 216.5, n217 = 217.5,
   315  n218 = 218.5, n219 = 219.5, n220 = 220.5, n221 = 221.5, n222 = 222.5,
   316  n223 = 223.5, n224 = 224.5, n225 = 225.5, n226 = 226.5, n227 = 227.5,
   317  n228 = 228.5, n229 = 229.5, n230 = 230.5, n231 = 231.5, n232 = 232.5,
   318  n233 = 233.5, n234 = 234.5, n235 = 235.5, n236 = 236.5, n237 = 237.5,
   319  n238 = 238.5, n239 = 239.5, a240 = 240.5, a241 = 241.5, a242 = 242.5,
   320  a243 = 243.5, a244 = 244.5, a245 = 245.5, a246 = 246.5, a247 = 247.5,
   321  a248 = 248.5, a249 = 249.5, n250 = 250.5, n251 = 251.5, n252 = 252.5,
   322  n253 = 253.5, n254 = 254.5, n255 = 255.5, n256 = 256.5, n257 = 257.5,
   323  n258 = 258.5, n259 = 259.5, n260 = 260.5, n261 = 261.5, n262 = 262.5,
   324  n263 = 263.5, n264 = 264.5, n265 = 265.5, n266 = 266.5, n267 = 267.5,
   325  n268 = 268.5, n269 = 269.5, n270 = 270.5, n271 = 271.5, n272 = 272.5,
   326  n273 = 273.5, n274 = 274.5, n275 = 275.5, n276 = 276.5, n277 = 277.5,
   327  n278 = 278.5, n279 = 279.5, n280 = 280.5, n281 = 281.5, n282 = 282.5,
   328  n283 = 283.5, n284 = 284.5, n285 = 285.5, n286 = 286.5, n287 = 287.5,
   329  n288 = 288.5, n289 = 289.5, n290 = 290.5, n291 = 291.5, n292 = 292.5,
   330  n293 = 293.5, n294 = 294.5, n295 = 295.5, n296 = 296.5, n297 = 297.5,
   331  n298 = 298.5, n299 = 299.5, j300 = 300} or 1
   332  until 1
   333  
   334  assert(a.n299 == 299.5)
   335  xxx = 1
   336  assert(xxx == 1)
   337  
   338  stat(a)
   339  
   340  function a:findfield (f)
   341    local i,v = next(self, nil)
   342    while i ~= f do
   343      if not i then return end
   344      i,v = next(self, i)
   345    end
   346    return v
   347  end
   348  
   349  local ii = 0
   350  i = 1
   351  while b[i] do
   352    local r = a:findfield(b[i]);
   353    assert(a[b[i]] == r)
   354    ii = math.max(ii,i)
   355    i = i+1
   356  end
   357  
   358  assert(ii == 299)
   359  
   360  function xxxx (x) coroutine.yield('b'); return ii+x end
   361  
   362  assert(xxxx(10) == 309)
   363  
   364  a = nil
   365  b = nil
   366  a1 = nil
   367  
   368  print("tables with table indices:")
   369  i = 1; a={}
   370  while i <= 1023 do a[{}] = i; i=i+1 end
   371  stat(a)
   372  a = nil
   373  
   374  print("tables with function indices:")
   375  a={}
   376  for i=1,511 do local x; a[function () return x end] = i end
   377  stat(a)
   378  a = nil
   379  
   380  print'OK'
   381  
   382  return 'a'