summaryrefslogtreecommitdiff
path: root/jbig2dec
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2020-03-25 01:12:52 +0800
committerSebastian Rasmussen <sebras@gmail.com>2020-04-02 22:52:56 +0800
commitd293095a593f7106e16027fb9782324ee7bb36f8 (patch)
tree47b39bcab0f8f38710ee03a8eb91f51ebaba5e34 /jbig2dec
parent6728387b7f4b803ea5a26eb220ce24e4ff65e710 (diff)
downloadghostpdl-d293095a593f7106e16027fb9782324ee7bb36f8.tar.gz
jbig2dec: Need to store local copy of error message.
Diffstat (limited to 'jbig2dec')
-rw-r--r--jbig2dec/jbig2dec.c48
1 files changed, 31 insertions, 17 deletions
diff --git a/jbig2dec/jbig2dec.c b/jbig2dec/jbig2dec.c
index 79f682d3e..9d703a40b 100644
--- a/jbig2dec/jbig2dec.c
+++ b/jbig2dec/jbig2dec.c
@@ -70,7 +70,7 @@ typedef struct {
typedef struct {
int verbose;
- const char *last_message;
+ char *last_message;
Jbig2Severity severity;
char *type;
long repeats;
@@ -402,9 +402,15 @@ error_callback(void *error_callback_data, const char *message, Jbig2Severity sev
break;
}
- if (state->last_message == NULL || (state->last_message != NULL && strcmp(message, state->last_message) && state->severity == severity && state->type == type)) {
- if (state->repeats > 1)
- {
+ if (state->last_message != NULL && !strcmp(message, state->last_message) && state->severity == severity && state->type == type) {
+ state->repeats++;
+ if (state->repeats % 1000000 == 0) {
+ ret = fprintf(stderr, "jbig2dec %s last message repeated %ld times so far\n", state->type, state->repeats);
+ if (ret < 0)
+ goto printerror;
+ }
+ } else {
+ if (state->repeats > 1) {
ret = fprintf(stderr, "jbig2dec %s last message repeated %ld times\n", state->type, state->repeats);
if (ret < 0)
goto printerror;
@@ -417,16 +423,19 @@ error_callback(void *error_callback_data, const char *message, Jbig2Severity sev
if (ret < 0)
goto printerror;
- state->last_message = message;
+ state->repeats = 0;
state->severity = severity;
state->type = type;
- state->repeats = 0;
- } else if (state->last_message != NULL) {
- state->repeats++;
- if (state->repeats % 1000000 == 0) {
- ret = fprintf(stderr, "jbig2dec %s last message repeated %ld times so far\n", state->type, state->repeats);
- if (ret < 0)
- goto printerror;
+ free(state->last_message);
+ state->last_message = NULL;
+
+ if (message) {
+ state->last_message = strdup(message);
+ if (state->last_message == NULL) {
+ ret = fprintf(stderr, "jbig2dec WARNING could not duplicate message\n");
+ if (ret < 0)
+ goto printerror;
+ }
}
}
@@ -434,8 +443,9 @@ error_callback(void *error_callback_data, const char *message, Jbig2Severity sev
printerror:
fprintf(stderr, "jbig2dec WARNING could not print message\n");
- state->last_message = NULL;
state->repeats = 0;
+ free(state->last_message);
+ state->last_message = NULL;
}
static void
@@ -559,6 +569,12 @@ main(int argc, char **argv)
filearg = parse_options(argc, argv, &params);
+ error_callback_state.verbose = params.verbose;
+ error_callback_state.severity = JBIG2_SEVERITY_DEBUG;
+ error_callback_state.type = NULL;
+ error_callback_state.last_message = NULL;
+ error_callback_state.repeats = 0;
+
if (params.hash)
hash_init(&params);
@@ -604,10 +620,6 @@ main(int argc, char **argv)
goto cleanup;
}
- error_callback_state.verbose = params.verbose;
- error_callback_state.last_message = NULL;
- error_callback_state.repeats = 0;
-
if (params.memory_limit == 0)
allocator = NULL;
else
@@ -759,6 +771,8 @@ cleanup:
jbig2_ctx_free(ctx);
if (params.output_filename)
free(params.output_filename);
+ if (error_callback_state.last_message)
+ free(error_callback_state.last_message);
if (params.hash)
hash_free(&params);