lorid

convert chordpro to pdf
git clone git://git.relim.de/lorid.git
Log | Files | Refs | README | LICENSE

commit ef0e4bb1432607e0e06379a134100052514e992a
parent 76236b8d9bdb5eb16fb32e725fd436349d21fcfa
Author: nibo <nibo@relim.de>
Date:   Tue, 15 Jul 2025 15:53:05 +0200

Free memory in case of error in src/chord_diagram.c

Diffstat:
Msrc/chord_diagram.c | 32++++++++++++++++++++++----------
1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/src/chord_diagram.c b/src/chord_diagram.c @@ -346,10 +346,10 @@ string_diagram_copy_all_but_name(struct StringDiagram *diagram) struct StringDiagram *copy = emalloc(sizeof(struct StringDiagram)); copy->base_fret = diagram->base_fret; int i; - for (i = 0; i<12; i++) { + for (i = 0; i<MAX_STRINGS; i++) { copy->frets[i] = diagram->frets[i]; } - for (i = 0; i<12; i++) { + for (i = 0; i<MAX_STRINGS; i++) { copy->fingers[i] = diagram->fingers[i]; } return copy; @@ -383,7 +383,7 @@ static size_t string_diagram_fret_count(struct StringDiagram *d) { int i; - for (i = 0; d->frets[i] != -2 && i < 12; i++); + for (i = 0; d->frets[i] != -2 && i < MAX_STRINGS; i++); return i; } @@ -587,6 +587,8 @@ chord_diagram_copy_all_but_name(struct ChordDiagram *diagram) break; default: util_log(NULL, 0, LOG_ERR, "Invalid ChordDiagram type '%d'", diagram->type); + free(copy->color); + free(copy); return NULL; } return copy; @@ -733,7 +735,10 @@ chord_diagrams_create( int d = 0; size_t i; char **names = NULL; - char *chord_name, *parsed_chord_name, *common_chord_name; + char *chord_name = NULL; + char *common_chord_name = NULL; + char *parsed_chord_name; + switch (config->output->diagram->instrument) { case INSTRUMENT_GUITAR: for (c = *chords; *c; c++) { @@ -741,10 +746,6 @@ chord_diagrams_create( parsed_chord_name = (*c)->name; common_chord_name = cho_chord_name_generate_common(*c, config); chord_name = cho_chord_name_generate(*c); - if (!common_chord_name) { - LOG_DEBUG("cho_chord_name_generate_common failed."); - return NULL; - } for (cd = custom_diagrams; *cd; cd++) { if ( (*cd)->type == CHORD_DIAGRAM_CONTENT_STRING && @@ -757,7 +758,7 @@ chord_diagrams_create( diagrams[d] = chord_diagram_copy_all_but_name(*cd); if (!diagrams[d]) { LOG_DEBUG("chord_diagram_copy_all_but_name failed."); - return NULL; + goto ERR; } diagrams[d]->u.sd->name = strdup(chord_name); d++; @@ -779,9 +780,11 @@ chord_diagrams_create( break; } } - NEXT_CHORD: ; + NEXT_CHORD: free(common_chord_name); free(chord_name); + common_chord_name = NULL; + chord_name = NULL; } break; case INSTRUMENT_KEYBOARD: @@ -797,6 +800,15 @@ chord_diagrams_create( diagrams[d] = NULL; strs_free(names); return diagrams; + ERR: + free(chord_name); + free(common_chord_name); + strs_free(names); + for (int k = 0; k<d; k++) { + chord_diagram_free(diagrams[k]); + } + free(diagrams); + return NULL; } bool