Improve the handling of dangling or invalid "%" sequences.

This commit is contained in:
Andrew Wood
2024-12-08 16:18:58 +00:00
parent 6298a7be9d
commit 838ebcb78f
10 changed files with 43 additions and 24 deletions
+1
View File
@@ -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
+2 -2
View File
@@ -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"
+2 -2
View File
@@ -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"
+2 -2
View File
@@ -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 ""
+2 -2
View File
@@ -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"
+2 -2
View File
@@ -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"
+2 -2
View File
@@ -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"
+2 -2
View File
@@ -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 -2
View File
@@ -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
View File
@@ -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;
}