man: слишком длинный список переменных среды MANPATH (слишком длинный список manpath) - PullRequest
0 голосов
/ 04 января 2019

При слишком длинном MANPATH env-vars у меня возникает проблема с этой ошибкой:

$> man <any command>
man: manpath list too long

Чтобы выяснить, когда список manpath слишком длинный, я создал этот небольшой скрипт:

#!/bin/bash
export MANPATH=
for i in $(seq 50 10000)
do
    export MANPATH=/usr:$MANPATH
    man -k gcc > /dev/null
    [ $? -ne 0 ] && echo "$i ${#MANPATH}" && exit 0
done

и кажется, что он ломается на ${#MANPATH} близко к 500.

Также man -d не дает мне никакой информации, которую я могу использовать ...: (

Я никогда не слышал (и не нашел) ограничения на количество записей в env-vars (кроме максимальной длины переменных окружения, от которой я далек).

Есть ли исправления для этого? Желательно исправление без прав root;)

Я использую Debian 9.6.

РЕДАКТИРОВАТЬ: Это было сообщено вверх по течению и исправлено!

1 Ответ

0 голосов
/ 10 января 2019

На основе manp.c, начиная со строки 786 :

        else if (sscanf (bp, "MANDATORY_MANPATH %511s", key) == 1)
            add_mandatory (key);    
        else if (sscanf (bp, "MANPATH_MAP %511s %511s",
             key, cont) == 2) 
            add_manpath_map (key, cont);
        else if ((c = sscanf (bp, "MANDB_MAP %511s %511s",
                      key, cont)) > 0) 
            add_mandb_map (key, cont, c, user);
        else if ((c = sscanf (bp, "DEFINE %511s %511[^\n]",
                      key, cont)) > 0) 
            add_def (key, cont, c, user);
        else if (sscanf (bp, "SECTION %511[^\n]", cont) == 1)
            add_sections (cont, user);
        else if (sscanf (bp, "SECTIONS %511[^\n]", cont) == 1)
            /* Since I keep getting it wrong ... */
...

Я бы сказал, что порог составляет 511 символов. Интересно, что есть комментарий, в котором говорится, что это должно быть исправлено.

        /* TODO: would like a (limited) replacement for sscanf()
         * here that allocates its own memory. At that point check
         * everything that sprintf()s manpath et al!
         */ 

Ссылки

...