summaryrefslogtreecommitdiff
path: root/jbig2dec
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2019-09-29 16:26:53 +0200
committerSebastian Rasmussen <sebras@gmail.com>2020-03-20 17:56:07 +0800
commit1899ce3f1844cf941d19c38fc8de8f126bf7419d (patch)
treee5abee4722b20d5cb3810a16bef105303d2a8827 /jbig2dec
parent4239ceeb4dd39e2ac183a01877b62761ae13bae4 (diff)
downloadghostpdl-1899ce3f1844cf941d19c38fc8de8f126bf7419d.tar.gz
jbig2dec: Avoid passing NULL buffer to snprintf().
Diffstat (limited to 'jbig2dec')
-rw-r--r--jbig2dec/jbig2dec.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/jbig2dec/jbig2dec.c b/jbig2dec/jbig2dec.c
index dad786f3c..39f487ebb 100644
--- a/jbig2dec/jbig2dec.c
+++ b/jbig2dec/jbig2dec.c
@@ -376,7 +376,6 @@ error_callback(void *error_callback_data, const char *buf, Jbig2Severity severit
{
jbig2dec_error_callback_state_t *state = (jbig2dec_error_callback_state_t *) error_callback_data;
char *type;
- char segment[22];
int len;
char *message;
@@ -403,27 +402,25 @@ error_callback(void *error_callback_data, const char *buf, Jbig2Severity severit
type = "unknown message";
break;
}
- if (seg_idx == -1)
- segment[0] = '\0';
- else
- snprintf(segment, sizeof(segment), "(segment 0x%02x)", seg_idx);
- len = snprintf(NULL, 0, "jbig2dec %s %s %s", type, buf, segment);
- if (len < 0) {
- return;
- }
+ /* Worst case length using format "jbig2dec %s %s (segment 0x%02x)".
+ strlen("jbig2dec ") +
+ strlen(type) + strlen(" ") +
+ strlen(buf) + strlen(" ") +
+ strlen("(segment 0x") + strlen("2147483648") + strlen(")") +
+ 1 for trailing NUL. The constant parts amount to 45 bytes. */
+ len = 45;
+ len += strlen(type);
+ len += strlen(buf);
message = malloc(len + 1);
if (message == NULL) {
return;
}
-
- len = snprintf(message, len + 1, "jbig2dec %s %s %s", type, buf, segment);
- if (len < 0)
- {
- free(message);
- return;
- }
+ if (seg_idx == -1)
+ snprintf(message, len + 1, "jbig2dec %s %s", type, buf);
+ else
+ snprintf(message, len + 1, "jbig2dec %s %s (segment 0x%02x)", type, buf, seg_idx);
if (state->last_message != NULL && strcmp(message, state->last_message)) {
if (state->repeats > 1)