Bug 12177 - Ошибка в выводе полей в utf8
: Ошибка в выводе полей в utf8
Status: CLOSED NOTABUG
: Sisyphus
(All bugs in Sisyphus/gnupg)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
: 10416
  Show dependency tree
 
Reported: 2007-06-28 14:38 by
Modified: 2010-02-11 05:04 (History)


Attachments
Исправляет ошибку (897 bytes, patch)
2007-06-28 14:43, Andriy Stepanov (stanv)
no flags Details | Diff


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2007-06-28 14:38:42
В документации по gnupg указано, что поля такие как UserID могуть быть
закодированы в utf8

Также, в man 1 gpg  указано:
 --with-colons
              Print  key  listings delimited by colons. Note that the output
will
              be encoded in UTF-8 regardless of  any  --display-charset 
setting.
              This  format  is useful when GnuPG is called from scripts and
other
              programs as it is easily machine parsed. The details of this
format
              are  documented in the file `doc/DETAILS', which is included in
the
              GnuPG source distribution.


т.е. поля выводится должны в utf8

Но при выводе поля искажаются.
Steps to Reproduce:
1.Сгенерировать ключ с русским UserID (gpg --gen-key)
2.Вывести $gpg --list-key --with-colons
Actual Results:  
на месте UserID будут крякозябры

Expected Results:  
UserID должен быть в utf8
------- Comment #1 From 2007-06-28 14:43:47 -------
Created an attachment (id=2061) [details]
Исправляет ошибку

Данная ошибка была обнаружена благодаря:

https://bugzilla.altlinux.org/show_bug.cgi?id=10416
http://bugs.kde.org/show_bug.cgi?id=144368

Тоесть kgpg не отображает нормально UserId если он не в ASCII.

Проблема заключается в том, что gpg c вызовом --list-key --with-colons изменяет
так строки utf8, что они не стоновятся не правильными.

Посмотрите пожалуйста патч.
------- Comment #2 From 2008-01-02 01:14:55 -------
(In reply to comment #0)
> В документации по gnupg указано, что поля такие как UserID могуть быть
> закодированы в utf8
> 
> Также, в man 1 gpg  указано:
>  --with-colons
>               Print  key  listings delimited by colons. Note that the output will
>               be encoded in UTF-8 regardless of  any  --display-charset  setting.
>               This  format  is useful when GnuPG is called from scripts and other
>               programs as it is easily machine parsed. The details of this format
>               are  documented in the file `doc/DETAILS', which is included in the
>               GnuPG source distribution.
> 
> 
> т.е. поля выводится должны в utf8

Согласно вышеупомянутому doc/DETAILS, User-ID кодируется следующим образом:
"The value is quoted like a C string to avoid control characters" и далее по
тексту.  Не могу сказать, что авторы это хорошо придумали, результат такой
кодировки не очень удобен ни для непосредственного восприятия, ни для разбора,
однако они документировали именно такое поведение.

Если уж квотить правильно, то следовало бы заменить
*p < 0x20 || (*p >= 0x7f && *p < 0xa0)
на аналог isprint() в локали C:
*p < 0x20 || *p >= 0x7f
------- Comment #3 From 2010-02-11 05:04:03 -------
Резюмирую: код соответствует документации, если в ней прочесть то, что имели в
виду авторы.  Проблемы не вижу, баг закрываю.