• 请不要在回答技术问题时复制粘贴 AI 生成的内容
XCG0000
V2EX  ›  程序员

bilibili lua BUG 本地未复现

  •  
  •   XCG0000 · Jul 24, 2022 · 3857 views
    This topic created in 1394 days ago, the information mentioned may be changed or developed.
    看了 b 站回顾去年 7 月份的崩溃问题,https://www.bilibili.com/read/cv17521097 ,聚焦在 lua 函数的参数校验和死循环上,但本地未能复现,有大神知道怎么回事吗? (第一次写 lua ,没有经验)

    代码:

    local _gcd
    _gcd = function (a, b)
    if b == 0 then
    return a
    end

    return _gcd(b, a % b)
    end

    print(_gcd(123, "0"))

    使用 VS Code 编写和运行, 在 a % b 时就直接退出了,并没有造成死循环:

    lua: attempt to perform 'n%0'
    stack traceback:
    [C]: in metamethod 'mod'
    /Users/.../lua_bilibug.lua:21: in local '_gcd'
    /Users/.../lua_bilibug.lua:24: in main chunk
    [C]: in ?


    其次,入参 b 是 ip 地址是什么意思?为什么 ip 地址会计算 GCD 呢?
    8 replies    2022-07-29 10:07:31 +08:00
    FYFX
        1
    FYFX  
       Jul 24, 2022   ❤️ 1
    换 luajit
    chotow
        2
    chotow  
       Jul 24, 2022
    > SLB 在 balance_by_lua 阶段,会将共享内存中保存的服务 IP 、Port 、Weight 作为参数传给 lua-resty-balancer 模块用于选择 upstream server ,在节点 weight = "0" 时,balancer 模块中的 _gcd 函数收到的入参 b 可能为 "0"。

    b 不是 IP 地址
    j0hnj
        3
    j0hnj  
       Jul 24, 2022
    用 luajit 复现了
    securityCoding
        4
    securityCoding  
       Jul 24, 2022
    文章写的确实很好,里面提到了 jit 问题
    HankLu
        5
    HankLu  
       Jul 24, 2022
    尽量不要递归
    msg7086
        6
    msg7086  
       Jul 25, 2022
    我简单找了一下,没有找到 lua 的标准化语言参考文档。所以我怀疑是不同的 lua 实现产生不同的行为导致的。
    比如说我看到有些文章里提到 lua 里除 0 会得到正无穷、负无穷或者 NaN ,所以我相信至少有一个实现是会得到这样结果的。
    unclemcz
        7
    unclemcz  
       Jul 28, 2022
    版本 5.2 ( linux arm64 )下也复现了,5.4 ( win x64 )没有复现。
    unclemcz
        8
    unclemcz  
       Jul 29, 2022
    @unclemcz #7 补充一下,版本 5.1-5.3 都可复现,5.4 代码传入‘0’会报错。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4844 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 190ms · UTC 09:50 · PVG 17:50 · LAX 02:50 · JFK 05:50
    ♥ Do have faith in what you're doing.