diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2020-03-25 01:12:52 +0800 |
---|---|---|
committer | Sebastian Rasmussen <sebras@gmail.com> | 2020-04-02 22:52:56 +0800 |
commit | d293095a593f7106e16027fb9782324ee7bb36f8 (patch) | |
tree | 47b39bcab0f8f38710ee03a8eb91f51ebaba5e34 /jbig2dec | |
parent | 6728387b7f4b803ea5a26eb220ce24e4ff65e710 (diff) | |
download | ghostpdl-d293095a593f7106e16027fb9782324ee7bb36f8.tar.gz |
jbig2dec: Need to store local copy of error message.
Diffstat (limited to 'jbig2dec')
-rw-r--r-- | jbig2dec/jbig2dec.c | 48 |
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, ¶ms); + 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(¶ms); @@ -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(¶ms); |