tags 577014 + patch thanks Dear maintainer,
I've prepared an NMU for abcm2ps (versioned as 5.9.13-0.1) and uploaded it to DELAYED/15, as it introduces a new upstream version. Please note, that I picked 5.9.13 instead of 5.9.12 as reported by Moritz, as 5.9.13 is to "Fix more security vulnerabilities". Best regards, Alexander PS: debscripts nmudiff shows all changes between the versions, however my changes are just to copy your debian directory and adding a changelog entry.
diff -Nru abcm2ps-5.9.7/abc2ps.c abcm2ps-5.9.13/abc2ps.c --- abcm2ps-5.9.7/abc2ps.c 2009-09-28 10:21:10.000000000 +0200 +++ abcm2ps-5.9.13/abc2ps.c 2010-04-11 12:16:16.000000000 +0200 @@ -1,7 +1,7 @@ /* * abcm2ps: a program to typeset tunes written in abc format using PostScript * - * Copyright (C) 1998-2008 Jean-François Moine + * Copyright (C) 1998-2010 Jean-François Moine * * Adapted from abc2ps-1.2.5: * Copyright (C) 1996,1997 Michael Methfessel @@ -84,9 +84,10 @@ /* memory arena (for clrarena, lvlarena & getarena) */ #define MAXAREAL 2 /* max area levels: * 0; global, 1: tune */ +#define MAXAREANASZ 8192 static int str_level; /* current arena level */ static struct str_a { - char str[4096]; /* memory area */ + char str[MAXAREANASZ]; /* memory area */ char *p; /* pointer in area */ struct str_a *n; /* next area */ int r; /* remaining space in area */ @@ -275,7 +276,10 @@ cfmt.continueall = 1; lock_fmt(&cfmt.continueall); break; - case 'E': epsf = 1; break; + case 'E': + close_output_file(); + epsf = 1; + break; case 'f': cfmt.flatbeams = 1; lock_fmt(&cfmt.flatbeams); @@ -465,6 +469,11 @@ } break; case 'O': + if (strlen(aaa) >= sizeof outfn) { + fprintf(stderr, + "++++ '-O' too large\n"); + exit(1); + } strcpy(outfn, aaa); break; case 's': @@ -860,7 +869,13 @@ a_p = str_c[str_level]; len = (len + 7) & ~7; /* align at 64 bits boundary */ - if (a_p->r < len) { + if (len > a_p->r) { + if (len > MAXAREANASZ) { + fprintf(stderr, + "++++ getarena - data too wide %d - aborting\n", + len); + exit(1); + } if (a_p->n == 0) { a_p->n = malloc(sizeof *str_r[0]); a_p->n->n = 0; diff -Nru abcm2ps-5.9.7/buffer.c abcm2ps-5.9.13/buffer.c --- abcm2ps-5.9.7/buffer.c 2009-09-25 10:37:00.000000000 +0200 +++ abcm2ps-5.9.13/buffer.c 2010-04-05 09:14:14.000000000 +0200 @@ -561,7 +561,7 @@ l = strlen(mbf); nbuf += l; - if (nbuf >= BUFFSZ - 500) { /* must have place for 1 more line */ + if (nbuf >= BUFFSZ - BSIZE) { /* must have room for 1 more line */ error(1, 0, "a2b: buffer full, BUFFSZ=%d", BUFFSZ); exit(3); } @@ -649,14 +649,16 @@ error(1, 0, "Cannot open EPS file '%s'", p); } else { fprintf(fout, - "save %% EPS file '%s'\n" + "save\n" "/showpage{}def/setpagedevice{pop}def\n" - "%s T\n", - p, &buf[i]); + "%s T\n" + "%%%%BeginDocument: %s\n", + &buf[i], p); while (fgets(line, sizeof line, f)) /* copy the file */ fwrite(line, 1, strlen(line), fout); fclose(f); - strcpy(line, "restore % end EPS\n"); + strcpy(line, "%%EndDocument\n" + "restore\n"); fwrite(line, 1, strlen(line), fout); } } diff -Nru abcm2ps-5.9.7/Changes abcm2ps-5.9.13/Changes --- abcm2ps-5.9.7/Changes 2009-11-18 11:28:20.000000000 +0100 +++ abcm2ps-5.9.13/Changes 2010-04-11 12:16:35.000000000 +0200 @@ -1,3 +1,35 @@ +---- Version 5.9.13 - 10/04/11 ---- + +Fix more security vulnerabilities (thanks to Tim Starling). + +---- Version 5.9.12 - 10/04/05 ---- + +Fix some security vulnerabilities (thanks to Tim Starling). +Add %%Begin/EndDocument when inserting a EPS file (thanks to Reinier Maliepaard). + +---- Version 5.9.11 - 10/02/24 ---- + +Fix measure bar numbering when %%setbarnb and many voices. +Fix measure bar numbering when M:none. +Fix the output of user postscript sequences when many output files. +Fix a crash when slur ending on a grace note at end of a secundary voice. +Fix a crash when a tune ends with T:. + +---- Version 5.9.10 - 10/02/02 ---- + +Fix lyrics display when not enough or too many lyrics in a music line alone + (the previous fix was not applied). + +---- Version 5.9.9 - 10/01/31 ---- + +Fix bar numbering when incomplete measure at start of tune. +Fix bar numbering when incomplete measure at end of previous line. +Fix lyrics display when not enough or too many lyrics in a music line alone. + +---- Version 5.9.8 - 10/01/19 ---- + +Add all whistle types in flute.fmt (thanks to Guido Gonzato). + ---- Version 5.9.7 - 09/11/18 ---- Add default PS definitions for dble sharp/flat percussion heads. diff -Nru abcm2ps-5.9.7/config.h abcm2ps-5.9.13/config.h --- abcm2ps-5.9.7/config.h 2009-11-18 12:11:34.000000000 +0100 +++ abcm2ps-5.9.13/config.h 2010-04-11 12:16:54.000000000 +0200 @@ -16,5 +16,5 @@ /* Define to have ~ as roll instead of twiddle. */ /* #undef DECO_IS_ROLL */ -#define VERSION "5.9.7" -#define VDATE "November 18, 2009" +#define VERSION "5.9.13" +#define VDATE "April 11, 2010" diff -Nru abcm2ps-5.9.7/configure abcm2ps-5.9.13/configure --- abcm2ps-5.9.7/configure 2009-11-18 12:11:04.000000000 +0100 +++ abcm2ps-5.9.13/configure 2010-04-11 12:17:16.000000000 +0200 @@ -1702,8 +1702,8 @@ -VERSION=5.9.7 -VDATE='November 18, 2009' +VERSION=5.9.13 +VDATE='April 11, 2010' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do diff -Nru abcm2ps-5.9.7/configure.in abcm2ps-5.9.13/configure.in --- abcm2ps-5.9.7/configure.in 2009-11-18 12:10:47.000000000 +0100 +++ abcm2ps-5.9.13/configure.in 2010-04-11 12:17:07.000000000 +0200 @@ -1,10 +1,10 @@ dnl Configure source for abcm2ps -*- sh -*- -dnl Copyright (C) 2001-2009 JF Moine. +dnl Copyright (C) 2001-2010 JF Moine. AC_INIT(abc2ps.h) -VERSION=5.9.7 -VDATE='November 18, 2009' +VERSION=5.9.13 +VDATE='April 11, 2010' AC_CANONICAL_SYSTEM diff -Nru abcm2ps-5.9.7/debian/changelog abcm2ps-5.9.13/debian/changelog --- abcm2ps-5.9.7/debian/changelog 2009-12-21 12:45:53.000000000 +0100 +++ abcm2ps-5.9.13/debian/changelog 2010-04-23 10:17:30.000000000 +0200 @@ -1,3 +1,11 @@ +abcm2ps (5.9.13-0.1) unstable; urgency=low + + * Non-maintainer upload. + * Upload new upstream release to fix "some security vulnerabilities" and + "more security vulnerabilities" (Closes: #577014) + + -- Alexander Reichle-Schmehl <toli...@debian.org> Fri, 23 Apr 2010 10:15:13 +0200 + abcm2ps (5.9.7-1) unstable; urgency=low * New upstream release diff -Nru abcm2ps-5.9.7/deco.c abcm2ps-5.9.13/deco.c --- abcm2ps-5.9.7/deco.c 2009-11-18 10:03:57.000000000 +0100 +++ abcm2ps-5.9.13/deco.c 2010-01-31 08:29:26.000000000 +0100 @@ -1793,46 +1793,16 @@ { struct SYMBOL *s; char *showm; - int bar_time, any_nb, wmeasure; + int any_nb, bar_num; float x, y, w; showm = cfmt.measurebox ? "showb" : "show"; any_nb = 0; - /* get the current bar number */ -/*fixme: what to do if no symbol in the 1st voice?*/ - if ((s = voice_tb[cursys->top_voice].sym) == 0 - || (s = s->next) == 0) - return; - for ( ; s->next != 0; s = s->next) { - switch (s->type) { - case TIMESIG: - case CLEF: - case KEYSIG: - case FMTCHG: - case STBRK: - continue; - case BAR: - if (s->u != 0) - nbar = s->u; /* (%%setbarnb) */ - else if (s->as.u.bar.repeat_bar - && s->as.text != 0 - && cfmt.contbarnb == 0) { - if (s->as.text[0] == '1') - nbar_rep = nbar; - else nbar = nbar_rep; /* restart bar numbering */ - } - break; - default: - break; - } - break; - } - if (nbar > 1) { - if (s->prev->type != CLEF) - s = s->prev; + s = tsfirst; /* clef */ + bar_num = nbar; + if (bar_num > 1) { if (cfmt.measurenb == 0) { - s = s->prev; /* clef */ set_font(MEASUREFONT); any_nb = 1; x = 0; @@ -1842,15 +1812,28 @@ y = staff_tb[0].topbar + 14; PUT0("0 "); puty(y); - PUT2("y0 M(%d)%s",nbar, showm); + PUT2("y0 M(%d)%s",bar_num, showm); y_set(s, 1, x, w, y + cfmt.font_tb[MEASUREFONT].size + 2); - } else if (nbar % cfmt.measurenb == 0) { + } else if (bar_num % cfmt.measurenb == 0) { + for ( ; ; s = s->ts_next) { + switch (s->type) { + case TIMESIG: + case CLEF: + case KEYSIG: + case FMTCHG: + case STBRK: + continue; + } + break; + } + if (s->prev->type != CLEF) + s = s->prev; x = s->x - s->wl; set_font(MEASUREFONT); any_nb = 1; w = cwid('0') * cfmt.font_tb[MEASUREFONT].size; - if (nbar >= 10) { - if (nbar >= 100) + if (bar_num >= 10) { + if (bar_num >= 100) w *= 3; else w *= 2; } @@ -1861,58 +1844,29 @@ y = staff_tb[0].topbar + 6; y += 2; putxy(x, y); - PUT2("y0 M(%d)%s", nbar, showm); + PUT2("y0 M(%d)%s", bar_num, showm); y += cfmt.font_tb[MEASUREFONT].size; y_set(s, 1, x, w, y); s->ymx = y; } } -/*fixme: KO when no bar at the end of the previous line */ - wmeasure = voice_tb[cursys->top_voice].meter.wmeasure; - bar_time = voice_tb[cursys->top_voice].sym->time + wmeasure; - for (s = voice_tb[cursys->top_voice].sym->next; s != 0; s = s->next) { - switch (s->type) { - case TIMESIG: - wmeasure = s->as.u.meter.wmeasure; - bar_time = s->time + wmeasure; - continue; - case MREST: - nbar += s->as.u.bar.len - 1; - continue; - default: - continue; - case BAR: - break; - } - if (s->u != 0) - nbar = s->u; /* (%%setbarnb) */ - if (s->time < bar_time) /* incomplete measure */ - continue; - if (s->u == 0) { - nbar++; - if (s->as.u.bar.repeat_bar - && s->as.text != 0 - && cfmt.contbarnb == 0) { - if (s->as.text[0] == '1') - nbar_rep = nbar; - else nbar = nbar_rep; /* restart bar numbering */ - } - } - bar_time = s->time + wmeasure; - if (s->as.u.bar.repeat_bar - || s->next == 0 - || cfmt.measurenb == 0 - || (nbar % cfmt.measurenb) != 0 - || nbar <= 1) + for ( ; s != 0; s = s->ts_next) { + if (s->type != BAR + || s->u == 0) + continue; + bar_num = s->u; + if (cfmt.measurenb == 0 + || (bar_num % cfmt.measurenb) != 0 + || s->next == 0) continue; if (!any_nb) { any_nb = 1; set_font(MEASUREFONT); } w = cwid('0') * cfmt.font_tb[MEASUREFONT].size; - if (nbar >= 10) { - if (nbar >= 100) + if (bar_num >= 10) { + if (bar_num >= 100) w *= 3; else w *= 2; } @@ -1934,13 +1888,14 @@ y += 2; PUT0(" "); putxy(x, y); - PUT2("y0 M(%d)%s",nbar, showm); + PUT2("y0 M(%d)%s",bar_num, showm); y += cfmt.font_tb[MEASUREFONT].size; y_set(s, 1, x, w, y); s->ymx = y; } if (any_nb) PUT0("\n"); + nbar = bar_num; } /* -- get the beat from a time signature -- */ diff -Nru abcm2ps-5.9.7/draw.c abcm2ps-5.9.13/draw.c --- abcm2ps-5.9.7/draw.c 2009-09-30 09:50:52.000000000 +0200 +++ abcm2ps-5.9.13/draw.c 2010-02-20 10:59:28.000000000 +0100 @@ -2163,7 +2163,8 @@ for (s1 = s; s1->next != 0; s1 = s1->next) ; s1->next = gr1->next; - gr1->next->prev = s1; + if (gr1->next != 0) + gr1->next->prev = s1; gr1->as.u.note.slur_st = SL_AUTO; } if (gr2 != 0) { @@ -2227,7 +2228,8 @@ } /* if slur in grace note sequence, restore the linkages */ - if (gr1 != 0) { + if (gr1 != 0 + && gr1->next != 0) { gr1->next->prev->next = 0; gr1->next->prev = gr1; } diff -Nru abcm2ps-5.9.7/flute.fmt abcm2ps-5.9.13/flute.fmt --- abcm2ps-5.9.7/flute.fmt 2008-02-09 11:56:36.000000000 +0100 +++ abcm2ps-5.9.13/flute.fmt 2010-01-10 11:35:25.000000000 +0100 @@ -120,6 +120,13 @@ pop grestore }! endps -tablature #1 pitch=C 28 0 63 tw_head tw_note -tablature #2 pitch=Bb, 54 0 63 tw_head tw_note -tablature #3 pitch=C 10 0 56 gbl_tete gbl_note +% all tin whistle transpositions +tablature #1 pitch=D 28 0 63 tw_head tw_note +tablature #2 pitch=C 28 0 63 tw_head tw_note +tablature #3 pitch=Eb 28 0 63 tw_head tw_note +tablature #4 pitch=Bb, 54 0 63 tw_head tw_note +tablature #5 pitch=F, 54 0 63 tw_head tw_note +tablature #6 pitch=G, 54 0 63 tw_head tw_note +tablature #7 pitch=A, 54 0 63 tw_head tw_note +% galoubet +tablature #8 pitch=C 10 0 56 gbl_tete gbl_note diff -Nru abcm2ps-5.9.7/Makefile abcm2ps-5.9.13/Makefile --- abcm2ps-5.9.7/Makefile 2009-10-02 10:41:15.000000000 +0200 +++ abcm2ps-5.9.13/Makefile 2010-04-09 12:52:43.000000000 +0200 @@ -1,6 +1,6 @@ # Makefile source for abcm2ps -VERSION = 5.9.7 +VERSION = 5.9.13 CC = gcc INSTALL = /usr/bin//install -c diff -Nru abcm2ps-5.9.7/music.c abcm2ps-5.9.13/music.c --- abcm2ps-5.9.7/music.c 2009-11-18 11:37:35.000000000 +0100 +++ abcm2ps-5.9.13/music.c 2010-02-24 09:35:57.000000000 +0100 @@ -2024,6 +2024,86 @@ return s; } +/* -- set the bar numbers -- */ +static void set_bar_num(void) +{ + struct SYMBOL *s; + int bar_time, wmeasure; + int bar_num; + + wmeasure = voice_tb[cursys->top_voice].meter.wmeasure; + if (wmeasure == 0) /* if M:none */ + wmeasure = 1; + + /* don't count a bar at start of line */ + for (s = tsfirst; ; s = s->ts_next) { + if (s == 0) + return; + switch (s->type) { + case TIMESIG: + case CLEF: + case KEYSIG: + case FMTCHG: + case STBRK: + continue; + case BAR: + if (s->u != 0) { + nbar = s->u; /* (%%setbarnb) */ + break; + } + if (s->as.u.bar.repeat_bar + && s->as.text != 0 + && cfmt.contbarnb == 0) { + if (s->as.text[0] == '1') + nbar_rep = nbar; + else { + nbar = nbar_rep; /* restart bar numbering */ + s->u = nbar; + } + } + break; + } + break; + } + + /* set the measure number on the top bars */ + bar_time = s->time + 1; /* for incomplete measure at start of tune */ + bar_num = nbar; + for ( ; s != 0; s = s->ts_next) { + switch (s->type) { + case TIMESIG: + wmeasure = s->as.u.meter.wmeasure; + bar_time = s->time + wmeasure; + break; + case MREST: + bar_num += s->as.u.bar.len - 1; + break; + case BAR: + if (s->u != 0) { + bar_num = s->u; /* (%%setbarnb) */ + s->u = 0; + if (s->time < bar_time) + break; + } else { + if (s->time < bar_time) /* incomplete measure */ + break; + bar_num++; + } + if (s->as.u.bar.repeat_bar + && s->as.text != 0 + && cfmt.contbarnb == 0) { + if (s->as.text[0] == '1') + nbar_rep = bar_num; + else /* restart bar numbering */ + bar_num = nbar_rep; + } + s->u = bar_num; + bar_time = s->time + wmeasure; + break; + } + } +} + /* -- cut the tune into music lines -- */ static void cut_tune(float lwidth, float indent) { @@ -4151,6 +4231,7 @@ lwidth = 20 CM; } indent = set_indent(); + set_bar_num(); cut_tune(lwidth, indent); alfa_last = 0.1; beta_last = 0; diff -Nru abcm2ps-5.9.7/options.txt abcm2ps-5.9.13/options.txt --- abcm2ps-5.9.7/options.txt 2008-02-07 08:53:44.000000000 +0100 +++ abcm2ps-5.9.13/options.txt 2010-01-10 11:35:29.000000000 +0100 @@ -141,6 +141,7 @@ -T<int>[<voice>], +T[<int>[<voice>]] Activate or deactivate tablature drawing. <int> is the tablature number as defined in %%tablature. + There may be only 8 different tablatures. <voice> is the voice name, full name or subname as found in V:. When absent, apply to all voices. Up to 4 such commands may be defined. diff -Nru abcm2ps-5.9.7/parse.c abcm2ps-5.9.13/parse.c --- abcm2ps-5.9.7/parse.c 2009-11-18 10:57:37.000000000 +0100 +++ abcm2ps-5.9.13/parse.c 2010-02-02 19:45:51.000000000 +0100 @@ -743,6 +743,7 @@ lyric_cont = 0; ln = lyric_nb - 1; } + curvoice->have_ly = 1; /* scan the lyric line */ while (*p != '\0') { @@ -876,7 +877,6 @@ s = s->next; if (s != 0) return "Not enough words for lyric line"; - curvoice->have_ly = 1; return 0; } diff -Nru abcm2ps-5.9.7/subs.c abcm2ps-5.9.13/subs.c --- abcm2ps-5.9.7/subs.c 2008-09-22 09:41:51.000000000 +0200 +++ abcm2ps-5.9.13/subs.c 2010-04-05 08:54:52.000000000 +0200 @@ -912,8 +912,7 @@ static char *trim_title(char *p, int first) { char *b, *q; - int l; -static char buf[256]; +static char buf[STRL1]; q = 0; if (cfmt.titletrim) { @@ -925,20 +924,29 @@ } } if (q == 0 && !cfmt.titlecaps && !(first && cfmt.withxrefs)) - return p; /* keep the title as it is */ + return p; /* keep the title as it is */ b = buf; - if (first && cfmt.withxrefs) - b += sprintf(b, "%s. ", &info['X' - 'A']->as.text[2]); + if (first && cfmt.withxrefs) { + char *r; + + r = &info['X' - 'A']->as.text[2]; + if (strlen(p) + strlen(r) + 3 >= STRL1) { + error(1, 0, "Title or X: too long"); + return p; + } + b += sprintf(b, "%s. ", r); + } else { + if (strlen(p) >= STRL1) { + error(1, 0, "Title too long"); + return p; + } + } if (q != 0) { strcpy(b, q + 2); b += strlen(q + 2); *b++ = ' '; - l = q - p; - if (l > buf + sizeof buf - b - 1) - l = buf + sizeof buf - b - 1; - } else l = buf + sizeof buf - b - 1; - strncpy(b, p, l); - b[l] = '\0'; + } + strcpy(b, p); if (cfmt.titlecaps) cap_str(buf); return buf; @@ -1300,12 +1308,9 @@ /* -- output the user defined postscript sequences -- */ void user_ps_write(void) { - struct u_ps *t, *r; + struct u_ps *t; - if ((t = user_ps) == 0) - return; - user_ps = 0; - for (;;) { + for (t = user_ps; t != 0; t = t->next) { if (t->text[0] == '\001') { /* PS file */ FILE *f; char line[BSIZE]; @@ -1318,10 +1323,8 @@ fwrite(line, 1, strlen(line), fout); fclose(f); } - } else fprintf(fout, "%s\n", t->text); - r = t->next; - free(t); - if ((t = r) == 0) - break; + } else { + fprintf(fout, "%s\n", t->text); + } } }
signature.asc
Description: Digital signature