summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Brabandt <cb@256bit.org>2024-04-16 22:23:17 +0200
committerChristian Brabandt <cb@256bit.org>2024-04-16 22:23:17 +0200
commitf7d31adcc22eae852d6e7a5b59e9755ba7b51d35 (patch)
tree7dfcab9b1a01a58b7b284ae2347e0e5261a3fb60
parent8560e6cf9797ea1d55ecaea6bf8ee8ec783c291a (diff)
patch 9.1.0340: Problem: Error with matchaddpos() and empty listv9.1.0340
Problem: Error with matchaddpos() and empty list (@rickhow) Solution: Return early for an empty list fixes: #14525 closes: #14563 Signed-off-by: Christian Brabandt <cb@256bit.org>
-rw-r--r--src/match.c4
-rw-r--r--src/testdir/test_match.vim2
-rw-r--r--src/version.c2
3 files changed, 5 insertions, 3 deletions
diff --git a/src/match.c b/src/match.c
index f59c2066a1..bc50757b37 100644
--- a/src/match.c
+++ b/src/match.c
@@ -87,7 +87,7 @@ match_add(
m = ALLOC_CLEAR_ONE(matchitem_T);
if (m == NULL)
return -1;
- if (pos_list != NULL)
+ if (pos_list != NULL && pos_list->lv_len > 0)
{
m->mit_pos_array = ALLOC_CLEAR_MULT(llpos_T, pos_list->lv_len);
if (m->mit_pos_array == NULL)
@@ -1294,7 +1294,7 @@ f_matchaddpos(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
return;
}
l = argvars[1].vval.v_list;
- if (l == NULL)
+ if (l == NULL || l->lv_len == 0)
return;
if (argvars[2].v_type != VAR_UNKNOWN)
diff --git a/src/testdir/test_match.vim b/src/testdir/test_match.vim
index 1896158907..eb777912eb 100644
--- a/src/testdir/test_match.vim
+++ b/src/testdir/test_match.vim
@@ -307,6 +307,7 @@ func Test_matchaddpos_error()
" Why doesn't the following error have an error code E...?
call assert_fails("call matchaddpos('Error', [{}])", 'E290:')
call assert_equal(-1, matchaddpos('Error', test_null_list()))
+ call assert_equal(-1, matchaddpos('Error', []))
call assert_fails("call matchaddpos('Error', [1], [], 1)", 'E745:')
call assert_equal(-1, matchaddpos('Search', [[]]))
call assert_fails("call matchaddpos('Search', [[{}]])", 'E728:')
@@ -433,5 +434,4 @@ func Test_match_tab_with_linebreak()
call StopVimInTerminal(buf)
endfunc
-
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 475f288d03..56c779e167 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 340,
+/**/
339,
/**/
338,
'#n144'>144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
#!/usr/bin/env bash

# netdata
# real-time performance and health monitoring, done right!
# (C) 2016 Costa Tsaousis <costa@tsaousis.gr>
# GPL v3+
#
# Script to find a better name for cgroups
#

export PATH="${PATH}:/sbin:/usr/sbin:/usr/local/sbin"
export LC_ALL=C

# -----------------------------------------------------------------------------

PROGRAM_NAME="$(basename "${0}")"

logdate() {
    date "+%Y-%m-%d %H:%M:%S"
}

log() {
    local status="${1}"
    shift

    echo >&2 "$(logdate): ${PROGRAM_NAME}: ${status}: ${*}"

}

warning() {
    log WARNING "${@}"
}

error() {
    log ERROR "${@}"
}

info() {
    log INFO "${@}"
}

fatal() {
    log FATAL "${@}"
    exit 1
}

debug=0
debug() {
    [ $debug -eq 1 ] && log DEBUG "${@}"
}

# -----------------------------------------------------------------------------

[ -z "${NETDATA_CONFIG_DIR}" ] && NETDATA_CONFIG_DIR="$(dirname "${0}")/../../../../etc/netdata"
CONFIG="${NETDATA_CONFIG_DIR}/cgroups-names.conf"
CGROUP="${1}"
NAME=

# -----------------------------------------------------------------------------

if [ -z "${CGROUP}" ]
    then
    fatal "called without a cgroup name. Nothing to do."
fi

if [ -f "${CONFIG}" ]
    then
    NAME="$(grep "^${CGROUP} " "${CONFIG}" | sed "s/[[:space:]]\+/ /g" | cut -d ' ' -f 2)"
    if [ -z "${NAME}" ]
        then
        info "cannot find cgroup '${CGROUP}' in '${CONFIG}'."
    fi
#else
#   info "configuration file '${CONFIG}' is not available."
fi

function docker_get_name_classic {
    local id="${1}"
    info "Running command: docker ps --filter=id=\"${id}\" --format=\"{{.Names}}\""
    NAME="$( docker ps --filter=id="${id}" --format="{{.Names}}" )"
    return 0
}

function docker_get_name_api {
    local id="${1}"
    if [ ! -S "/var/run/docker.sock" ]
        then
        warning "Can't find /var/run/docker.sock"
        return 1
    fi
    info "Running API command: /containers/${id}/json"
    JSON=$(echo -e "GET /containers/${id}/json HTTP/1.0\r\n" | nc -U /var/run/docker.sock | grep '^{.*')
    NAME=$(echo $JSON | jq -r .Name,.Config.Hostname | grep -v null | head -n1 | sed 's|^/||')
    return 0
}

if [ -z "${NAME}" ]
    then
    if [[ "${CGROUP}" =~ ^.*docker[-_/\.][a-fA-F0-9]+[-_\.]?.*$ ]]
        then
        # docker containers

        DOCKERID="$( echo "${CGROUP}" | sed "s|^.*docker[-_/]\([a-fA-F0-9]\+\)[-_\.]\?.*$|\1|" )"
        # echo "DOCKERID=${DOCKERID}"

        if [ ! -z "${DOCKERID}" -a \( ${#DOCKERID} -eq 64 -o ${#DOCKERID} -eq 12 \) ]
            then
            if hash docker 2>/dev/null
                then
                docker_get_name_classic ${DOCKERID}
            else
                docker_get_name_api ${DOCKERID} || docker_get_name_classic ${DOCKERID}
            fi
            if [ -z "${NAME}" ]
                then
                warning "cannot find the name of docker container '${DOCKERID}'"
                NAME="${DOCKERID:0:12}"
            else
                info "docker container '${DOCKERID}' is named '${NAME}'"
            fi
        fi
    elif [[ "${CGROUP}" =~ machine.slice_machine.*-qemu ]]
        then
        # libvirtd / qemu virtual machines

        # NAME="$(echo ${CGROUP} | sed 's/machine.slice_machine.*-qemu//; s/\/x2d//; s/\/x2d/\-/g; s/\.scope//g')"
        NAME="qemu_$(echo ${CGROUP} | sed 's/machine.slice_machine.*-qemu//; s/\/x2d[[:digit:]]*//; s/\/x2d//g; s/\.scope//g')"

    elif [[ "${CGROUP}" =~ qemu.slice_([0-9]+).scope && -d /etc/pve ]]
        then
        # Proxmox VMs

        FILENAME="/etc/pve/qemu-server/${BASH_REMATCH[1]}.conf"
        if [[ -f $FILENAME && -r $FILENAME ]]
            then
            NAME="qemu_$(grep -e '^name: ' "/etc/pve/qemu-server/${BASH_REMATCH[1]}.conf" | head -1 | sed -rn 's|\s*name\s*:\s*(.*)?$|\1|p')"
        else
            error "proxmox config file missing ${FILENAME} or netdata does not have read access.  Please ensure netdata is a member of www-data group."
        fi
    elif [[ "${CGROUP}" =~ lxc_([0-9]+) && -d /etc/pve ]]
        then
        # Proxmox Containers (LXC)

        FILENAME="/etc/pve/lxc/${BASH_REMATCH[1]}.conf"
        if [[ -f ${FILENAME} && -r ${FILENAME} ]]
            then
            NAME=$(grep -e '^hostname: ' /etc/pve/lxc/${BASH_REMATCH[1]}.conf | head -1 | sed -rn 's|\s*hostname\s*:\s*(.*)?$|\1|p')
        else
            error "proxmox config file missing ${FILENAME} or netdata does not have read access.  Please ensure netdata is a member of www-data group."
        fi
    fi

    [ -z "${NAME}" ] && NAME="${CGROUP}"
    [ ${#NAME} -gt 100 ] && NAME="${NAME:0:100}"
fi

info "cgroup '${CGROUP}' is called '${NAME}'"
echo "${NAME}"