mirror of
git://git.gnupg.org/gnupg.git
synced 2025-04-17 15:44:34 +02:00
common: Extend utf8_charcount to include the string's length.
* common/stringhelp.c (utf8_charcount): Take additional parameter, len. Process at most LEN bytes. -- Signed-off-by: Neal H. Walfield <neal@g10code.com>
This commit is contained in:
parent
b75e1b3d8b
commit
5b84b0d660
@ -221,7 +221,7 @@ check_passphrase_constraints (ctrl_t ctrl, const char *pw,
|
|||||||
|
|
||||||
/* Now check the constraints and collect the error messages unless
|
/* Now check the constraints and collect the error messages unless
|
||||||
in in silent mode which returns immediately. */
|
in in silent mode which returns immediately. */
|
||||||
if (utf8_charcount (pw) < minlen )
|
if (utf8_charcount (pw, -1) < minlen )
|
||||||
{
|
{
|
||||||
if (!failed_constraint)
|
if (!failed_constraint)
|
||||||
{
|
{
|
||||||
|
@ -746,17 +746,31 @@ sanitize_buffer (const void *p_arg, size_t n, int delim)
|
|||||||
|
|
||||||
/* Given a string containing an UTF-8 encoded text, return the number
|
/* Given a string containing an UTF-8 encoded text, return the number
|
||||||
of characters in this string. It differs from strlen in that it
|
of characters in this string. It differs from strlen in that it
|
||||||
only counts complete UTF-8 characters. Note, that this function
|
only counts complete UTF-8 characters. SIZE is the maximum length
|
||||||
does not take combined characters into account. */
|
of the string in bytes. If SIZE is -1, then a NUL character is
|
||||||
|
taken to be the end of the string. Note, that this function does
|
||||||
|
not take combined characters into account. */
|
||||||
size_t
|
size_t
|
||||||
utf8_charcount (const char *s)
|
utf8_charcount (const char *s, int len)
|
||||||
{
|
{
|
||||||
size_t n;
|
size_t n;
|
||||||
|
|
||||||
|
if (len == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
for (n=0; *s; s++)
|
for (n=0; *s; s++)
|
||||||
|
{
|
||||||
if ( (*s&0xc0) != 0x80 ) /* Exclude continuation bytes: 10xxxxxx */
|
if ( (*s&0xc0) != 0x80 ) /* Exclude continuation bytes: 10xxxxxx */
|
||||||
n++;
|
n++;
|
||||||
|
|
||||||
|
if (len != -1)
|
||||||
|
{
|
||||||
|
len --;
|
||||||
|
if (len == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ int hextobyte (const char *s);
|
|||||||
char *sanitize_buffer (const void *p, size_t n, int delim);
|
char *sanitize_buffer (const void *p, size_t n, int delim);
|
||||||
|
|
||||||
|
|
||||||
size_t utf8_charcount (const char *s);
|
size_t utf8_charcount (const char *s, int len);
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_W32_SYSTEM
|
#ifdef HAVE_W32_SYSTEM
|
||||||
|
@ -1043,7 +1043,7 @@ build_list (const char *text, char letter,
|
|||||||
if (maybe_setuid)
|
if (maybe_setuid)
|
||||||
gcry_control (GCRYCTL_INIT_SECMEM, 0, 0); /* Drop setuid. */
|
gcry_control (GCRYCTL_INIT_SECMEM, 0, 0); /* Drop setuid. */
|
||||||
|
|
||||||
indent = utf8_charcount (text);
|
indent = utf8_charcount (text, -1);
|
||||||
len = 0;
|
len = 0;
|
||||||
init_membuf (&mb, 512);
|
init_membuf (&mb, 512);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user