cloudwu / pbc

A protocol buffers library for C
MIT License
1.62k stars 567 forks source link

bug fix #153

Open hanjingo opened 2 years ago

hanjingo commented 2 years ago

example:

test.lua

addressbook = {
    name = "Alice",
    id = 12345,
    phone = {
        { number = "1301234567" },
        { number = "87654321", type = "WORK" },
    }
}

root@ef956f202572:/usr/src/pbc/binding/lua53# lua test.lua test/addressbook.proto tutorial Profile nick_name [1] LABEL_OPTIONAL icon [2] LABEL_OPTIONAL Person name [1] LABEL_REQUIRED id [2] LABEL_REQUIRED email [3] LABEL_OPTIONAL phone [4] LABEL_REPEATED test [5] LABEL_REPEATED profile [6] LABEL_OPTIONAL Ext AddressBook person [1] LABEL_REPEATED Alice 12345 1301234567 HOME 87654321 WORK Alice 123 table: 0xaaaaf4c2eed0

---------------------split line-----------------------------

modify test.lua with:

addressbook = {
    name = "Alice",
    id = 12345,
    phone = {
        { number = "1301234567" },
        { number = "87654321", type = "WORK" },
    },
    c = 3,     -- <-i'm here
}

root@ef956f202572:/usr/src/pbc/binding/lua53# lua test.lua test/addressbook.proto tutorial Profile nick_name [1] LABEL_OPTIONAL icon [2] LABEL_OPTIONAL Person name [1] LABEL_REQUIRED id [2] LABEL_REQUIRED email [3] LABEL_OPTIONAL phone [4] LABEL_REPEATED test [5] LABEL_REPEATED profile [6] LABEL_OPTIONAL Ext AddressBook person [1] LABEL_REPEATED lua: ./protobuf.lua:308: c stack traceback: [C]: in function 'assert' ./protobuf.lua:308: in metamethod '__index' ./protobuf.lua:217: in upvalue 'encode_message' ./protobuf.lua:324: in function 'protobuf.encode' test.lua:35: in main chunk [C]: in ?

cloudwu commented 2 years ago

I think it’s a feature , it raises an error when you put undefined fields into the table.

hanjingo commented 2 years ago

如果在项目中遵从这个特性,那么会需要额外定义一份专门用来序列化的table并赋值,而不是使用原有的table, 这样的消耗非常不划算 i must define another table for serialize data if i comply this rule in my project, it very low efficiency