V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
XCG0000
V2EX  ›  程序员

bilibili lua BUG 本地未复现

  •  
  •   XCG0000 · 2022-07-24 12:00:32 +08:00 · 3142 次点击
    这是一个创建于 644 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看了 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 条回复    2022-07-29 10:07:31 +08:00
    FYFX
        1
    FYFX  
       2022-07-24 12:02:46 +08:00   ❤️ 1
    换 luajit
    chotow
        2
    chotow  
       2022-07-24 12:09:58 +08:00
    > SLB 在 balance_by_lua 阶段,会将共享内存中保存的服务 IP 、Port 、Weight 作为参数传给 lua-resty-balancer 模块用于选择 upstream server ,在节点 weight = "0" 时,balancer 模块中的 _gcd 函数收到的入参 b 可能为 "0"。

    b 不是 IP 地址
    j0hnj
        3
    j0hnj  
       2022-07-24 12:34:33 +08:00
    用 luajit 复现了
    securityCoding
        4
    securityCoding  
       2022-07-24 15:02:39 +08:00
    文章写的确实很好,里面提到了 jit 问题
    HankLu
        5
    HankLu  
       2022-07-24 15:51:25 +08:00
    尽量不要递归
    msg7086
        6
    msg7086  
       2022-07-25 05:15:17 +08:00
    我简单找了一下,没有找到 lua 的标准化语言参考文档。所以我怀疑是不同的 lua 实现产生不同的行为导致的。
    比如说我看到有些文章里提到 lua 里除 0 会得到正无穷、负无穷或者 NaN ,所以我相信至少有一个实现是会得到这样结果的。
    unclemcz
        7
    unclemcz  
       2022-07-28 13:12:01 +08:00
    版本 5.2 ( linux arm64 )下也复现了,5.4 ( win x64 )没有复现。
    unclemcz
        8
    unclemcz  
       2022-07-29 10:07:30 +08:00
    @unclemcz #7 补充一下,版本 5.1-5.3 都可复现,5.4 代码传入‘0’会报错。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3046 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:17 · PVG 22:17 · LAX 07:17 · JFK 10:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.