implement size constraint on value

This commit is contained in:
lash 2023-03-31 20:23:45 +01:00
parent 725ee335ec
commit 0f1483430d
Signed by untrusted user who does not match committer: lash
GPG Key ID: 21D2E7BB88C2A746
2 changed files with 11 additions and 6 deletions

View File

@ -66,7 +66,13 @@ func(st *State) Down(input string) {
st.ExecPath = append(st.ExecPath, input) st.ExecPath = append(st.ExecPath, input)
} }
func(st *State) Add(key string, value string, sizeHint uint32) error { func(st *State) Add(key string, value string, sizeHint uint16) error {
if sizeHint > 0 {
l := uint16(len(value))
if l > sizeHint {
return fmt.Errorf("value length %v exceeds value size limit %v", l, sizeHint)
}
}
checkFrame := st.frameOf(key) checkFrame := st.frameOf(key)
if checkFrame > -1 { if checkFrame > -1 {
return fmt.Errorf("key %v already defined in frame %v", key, checkFrame) return fmt.Errorf("key %v already defined in frame %v", key, checkFrame)
@ -78,7 +84,6 @@ func(st *State) Add(key string, value string, sizeHint uint32) error {
log.Printf("add key %s value size %v", key, sz) log.Printf("add key %s value size %v", key, sz)
st.Cache[len(st.Cache)-1][key] = value st.Cache[len(st.Cache)-1][key] = value
st.CacheUseSize += sz st.CacheUseSize += sz
_ = sizeHint
return nil return nil
} }

View File

@ -118,7 +118,7 @@ func RunCatch(instruction []byte, st state.State, rs resource.Fetcher, ctx conte
return st, instruction, err return st, instruction, err
} }
_ = tail _ = tail
st.Add(head, r, uint32(len(r))) st.Add(head, r, 0)
return st, []byte{}, nil return st, []byte{}, nil
} }
@ -141,15 +141,15 @@ func RunLoad(instruction []byte, st state.State, rs resource.Fetcher, ctx contex
if !st.Check(head) { if !st.Check(head) {
return st, instruction, fmt.Errorf("key %v already loaded", head) return st, instruction, fmt.Errorf("key %v already loaded", head)
} }
sz := uint32(tail[0]) sz := uint16(tail[0])
tail = tail[1:] tail = tail[1:]
r, err := refresh(head, tail, rs, ctx) r, err := refresh(head, tail, rs, ctx)
if err != nil { if err != nil {
return st, tail, err return st, tail, err
} }
st.Add(head, r, sz) err = st.Add(head, r, sz)
return st, tail, nil return st, tail, err
} }
func RunReload(instruction []byte, st state.State, rs resource.Fetcher, ctx context.Context) (state.State, []byte, error) { func RunReload(instruction []byte, st state.State, rs resource.Fetcher, ctx context.Context) (state.State, []byte, error) {