Improve the handling of dangling or invalid "%" sequences.
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
* *fix:* add _configure_ script fallback for **--remote** check when cross-compiling (#120)
|
||||
* *fix:* allow **extra-display** to be changed by **--remote** (#123)
|
||||
* *cleanup:* refactored display formatters into separate functions
|
||||
* *cleanup:* improve format parser handling of dangling or invalid "%" sequences
|
||||
|
||||
### 1.9.7 - 2 December 2024
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||
"POT-Creation-Date: 2024-12-08 15:56+0000\n"
|
||||
"POT-Creation-Date: 2024-12-08 16:17+0000\n"
|
||||
"PO-Revision-Date: 2024-10-13 20:43+0000\n"
|
||||
"Last-Translator: mmatous <mmatous@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Czech <https://translate.codeberg.org/projects/pv/pv/cs/>\n"
|
||||
@@ -433,7 +433,7 @@ msgstr "b"
|
||||
msgid "B"
|
||||
msgstr "B"
|
||||
|
||||
#: src/pv/display.c:1467 src/pv/transfer.c:1064
|
||||
#: src/pv/display.c:1485 src/pv/transfer.c:1064
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "selhala alokace vyrovnávací paměti"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||
"POT-Creation-Date: 2024-12-08 15:56+0000\n"
|
||||
"POT-Creation-Date: 2024-12-08 16:17+0000\n"
|
||||
"PO-Revision-Date: 2024-10-13 20:43+0000\n"
|
||||
"Last-Translator: fnetX <otto@codeberg.org>\n"
|
||||
"Language-Team: German <https://translate.codeberg.org/projects/pv/pv/de/>\n"
|
||||
@@ -456,7 +456,7 @@ msgstr "b"
|
||||
msgid "B"
|
||||
msgstr "B"
|
||||
|
||||
#: src/pv/display.c:1467 src/pv/transfer.c:1064
|
||||
#: src/pv/display.c:1485 src/pv/transfer.c:1064
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "Speicherzuweisung für den Puffer fehlgeschlagen"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||
"POT-Creation-Date: 2024-12-08 15:56+0000\n"
|
||||
"POT-Creation-Date: 2024-12-08 16:17+0000\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -425,7 +425,7 @@ msgstr ""
|
||||
msgid "B"
|
||||
msgstr ""
|
||||
|
||||
#: src/pv/display.c:1467 src/pv/transfer.c:1064
|
||||
#: src/pv/display.c:1485 src/pv/transfer.c:1064
|
||||
msgid "buffer allocation failed"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||
"POT-Creation-Date: 2024-12-08 15:56+0000\n"
|
||||
"POT-Creation-Date: 2024-12-08 16:17+0000\n"
|
||||
"PO-Revision-Date: 2024-10-12 11:13+0000\n"
|
||||
"Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: French <https://translate.codeberg.org/projects/pv/pv/fr/>\n"
|
||||
@@ -460,7 +460,7 @@ msgstr ""
|
||||
msgid "B"
|
||||
msgstr "O"
|
||||
|
||||
#: src/pv/display.c:1467 src/pv/transfer.c:1064
|
||||
#: src/pv/display.c:1485 src/pv/transfer.c:1064
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "échec de l'allocation de mémoire tampon"
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||
"POT-Creation-Date: 2024-12-08 15:56+0000\n"
|
||||
"POT-Creation-Date: 2024-12-08 16:17+0000\n"
|
||||
"PO-Revision-Date: 2024-10-20 14:07+0000\n"
|
||||
"Last-Translator: coralpink <coralpink@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Polish <https://translate.codeberg.org/projects/pv/pv/pl/>\n"
|
||||
@@ -451,7 +451,7 @@ msgstr "b"
|
||||
msgid "B"
|
||||
msgstr "B"
|
||||
|
||||
#: src/pv/display.c:1467 src/pv/transfer.c:1064
|
||||
#: src/pv/display.c:1485 src/pv/transfer.c:1064
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "nie udało się zaalokować bufora"
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||
"POT-Creation-Date: 2024-12-08 15:56+0000\n"
|
||||
"POT-Creation-Date: 2024-12-08 16:17+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -439,7 +439,7 @@ msgstr ""
|
||||
msgid "B"
|
||||
msgstr ""
|
||||
|
||||
#: src/pv/display.c:1467 src/pv/transfer.c:1064
|
||||
#: src/pv/display.c:1485 src/pv/transfer.c:1064
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "erro alocando o buffer"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||
"POT-Creation-Date: 2024-12-08 15:56+0000\n"
|
||||
"POT-Creation-Date: 2024-12-08 16:17+0000\n"
|
||||
"PO-Revision-Date: 2024-10-22 18:07+0000\n"
|
||||
"Last-Translator: 0ko <0ko@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Russian <https://translate.codeberg.org/projects/pv/pv/ru/>\n"
|
||||
@@ -434,7 +434,7 @@ msgstr "бит"
|
||||
msgid "B"
|
||||
msgstr "байт"
|
||||
|
||||
#: src/pv/display.c:1467 src/pv/transfer.c:1064
|
||||
#: src/pv/display.c:1485 src/pv/transfer.c:1064
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "не удалось выделить память для буфера"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: pv 1.8.14\n"
|
||||
"Report-Msgid-Bugs-To: pv@ivarch.com\n"
|
||||
"POT-Creation-Date: 2024-12-08 15:56+0000\n"
|
||||
"POT-Creation-Date: 2024-12-08 16:17+0000\n"
|
||||
"PO-Revision-Date: 2024-10-12 23:51+0000\n"
|
||||
"Last-Translator: a-j-wood <a-j-wood@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Turkish <https://translate.codeberg.org/projects/pv/pv/tr/>\n"
|
||||
@@ -435,7 +435,7 @@ msgstr "b"
|
||||
msgid "B"
|
||||
msgstr "B"
|
||||
|
||||
#: src/pv/display.c:1467 src/pv/transfer.c:1064
|
||||
#: src/pv/display.c:1485 src/pv/transfer.c:1064
|
||||
msgid "buffer allocation failed"
|
||||
msgstr "arabellek tahsisi başarısız oldu"
|
||||
|
||||
|
||||
+26
-8
@@ -1271,11 +1271,12 @@ static void pv__format_init(pvstate_t state, /*@null@ */ const char *format_supp
|
||||
|
||||
if ('%' == display_format[strpos]) {
|
||||
unsigned long number_prefix;
|
||||
size_t sequence_start, sequence_length;
|
||||
size_t percent_sign_offset, sequence_start, sequence_length;
|
||||
#if HAVE_STRTOUL
|
||||
char *number_end_ptr;
|
||||
#endif
|
||||
|
||||
percent_sign_offset = strpos;
|
||||
strpos++;
|
||||
|
||||
/*
|
||||
@@ -1286,10 +1287,11 @@ static void pv__format_init(pvstate_t state, /*@null@ */ const char *format_supp
|
||||
#if HAVE_STRTOUL
|
||||
number_end_ptr = NULL;
|
||||
number_prefix = strtoul(&(display_format[strpos]), &number_end_ptr, 10);
|
||||
if ((NULL == number_end_ptr) || (number_end_ptr[0] == '\0'))
|
||||
break;
|
||||
if (number_end_ptr > &(display_format[strpos]))
|
||||
if ((NULL == number_end_ptr) || (number_end_ptr[0] == '\0')) {
|
||||
number_prefix = 0;
|
||||
} else if (number_end_ptr > &(display_format[strpos])) {
|
||||
strpos += (number_end_ptr - &(display_format[strpos]));
|
||||
}
|
||||
#else /* !HAVE_STRTOUL */
|
||||
while (isdigit((int) (display_format[strpos]))) {
|
||||
number_prefix = number_prefix * 10;
|
||||
@@ -1299,9 +1301,12 @@ static void pv__format_init(pvstate_t state, /*@null@ */ const char *format_supp
|
||||
#endif /* !HAVE_STRTOUL */
|
||||
|
||||
sequence_start = strpos;
|
||||
sequence_length = 1;
|
||||
sequence_length = 0;
|
||||
if ('\0' != display_format[strpos])
|
||||
sequence_length = 1;
|
||||
if ('{' == display_format[strpos]) {
|
||||
while ('\0' != display_format[strpos] && '}' != display_format[strpos]) {
|
||||
while ('\0' != display_format[strpos] && '}' != display_format[strpos]
|
||||
&& '%' != display_format[strpos]) {
|
||||
strpos++;
|
||||
sequence_length++;
|
||||
}
|
||||
@@ -1322,8 +1327,21 @@ static void pv__format_init(pvstate_t state, /*@null@ */ const char *format_supp
|
||||
}
|
||||
|
||||
if (-1 == component_type) {
|
||||
str_start = sequence_start;
|
||||
str_bytes = sequence_length;
|
||||
/* Unknown sequence - pass it through verbatim. */
|
||||
str_start = percent_sign_offset;
|
||||
str_bytes = sequence_length + sequence_start - percent_sign_offset;
|
||||
|
||||
if (2 == str_bytes && '%' == display_format[percent_sign_offset + 1]) {
|
||||
/* Special case: "%%" => "%". */
|
||||
str_bytes = 1;
|
||||
} else if (str_bytes > 1 && '%' == display_format[strpos]) {
|
||||
/* Special case: "%{foo%p" => "%{foo" and go back one. */
|
||||
str_bytes--;
|
||||
strpos--;
|
||||
} else if (str_bytes == 0 && '\0' == display_format[strpos]) {
|
||||
/* Special case: "%" at end of string = "%". */
|
||||
str_bytes = 1;
|
||||
}
|
||||
} else {
|
||||
chosen_size = (size_t) number_prefix;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user