Skip to content
Snippets Groups Projects
  • Connor Kuehl's avatar
    2b99cfce
    block/rbd: Add an escape-aware strchr helper · 2b99cfce
    Connor Kuehl authored
    
    Sometimes the parser needs to further split a token it has collected
    from the token input stream. Right now, it does a cursory check to see
    if the relevant characters appear in the token to determine if it should
    break it down further.
    
    However, qemu_rbd_next_tok() will escape characters as it removes tokens
    from the token stream and plain strchr() won't. This can make the
    initial strchr() check slightly misleading since it implies
    qemu_rbd_next_tok() will find the token and split on it, except the
    reality is that qemu_rbd_next_tok() will pass over it if it is escaped.
    
    Use a custom strchr to avoid mixing escaped and unescaped string
    operations. Furthermore, this code is identical to how
    qemu_rbd_next_tok() seeks its next token, so incorporate this custom
    strchr into the body of that function to reduce duplication.
    
    Reported-by: default avatarHan Han <hhan@redhat.com>
    Fixes: https://bugzilla.redhat.com/1873913
    
    
    Signed-off-by: default avatarConnor Kuehl <ckuehl@redhat.com>
    Message-Id: <20210421212343.85524-3-ckuehl@redhat.com>
    Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
    Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
    2b99cfce
    History
    block/rbd: Add an escape-aware strchr helper
    Connor Kuehl authored
    
    Sometimes the parser needs to further split a token it has collected
    from the token input stream. Right now, it does a cursory check to see
    if the relevant characters appear in the token to determine if it should
    break it down further.
    
    However, qemu_rbd_next_tok() will escape characters as it removes tokens
    from the token stream and plain strchr() won't. This can make the
    initial strchr() check slightly misleading since it implies
    qemu_rbd_next_tok() will find the token and split on it, except the
    reality is that qemu_rbd_next_tok() will pass over it if it is escaped.
    
    Use a custom strchr to avoid mixing escaped and unescaped string
    operations. Furthermore, this code is identical to how
    qemu_rbd_next_tok() seeks its next token, so incorporate this custom
    strchr into the body of that function to reduce duplication.
    
    Reported-by: default avatarHan Han <hhan@redhat.com>
    Fixes: https://bugzilla.redhat.com/1873913
    
    
    Signed-off-by: default avatarConnor Kuehl <ckuehl@redhat.com>
    Message-Id: <20210421212343.85524-3-ckuehl@redhat.com>
    Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
    Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>