commit abcm2ps for openSUSE:Factory
Hello community, here is the log from the commit of package abcm2ps for openSUSE:Factory checked in at 2018-12-28 12:34:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/abcm2ps (Old) and /work/SRC/openSUSE:Factory/.abcm2ps.new.28833 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "abcm2ps" Fri Dec 28 12:34:24 2018 rev:3 rq:661245 version:8.14.2 Changes: -------- --- /work/SRC/openSUSE:Factory/abcm2ps/abcm2ps.changes 2018-11-20 22:45:11.450220306 +0100 +++ /work/SRC/openSUSE:Factory/.abcm2ps.new.28833/abcm2ps.changes 2018-12-28 12:34:25.308001172 +0100 @@ -1,0 +2,19 @@ +Sat Dec 22 14:15:23 UTC 2018 - Michael Vetter <mvetter@suse.com> + +- Update to 8.14.2: + * !8va! must be above the staff + * crash when SVG output and call to an unknown symbol in PS sequence + * crash when no note in voice overlay + * crash when SVG output and 'F' is not a font name in a PS sequence + * crash when only one bar in a voice and no symbol in a second voice + * possible crashes when bad definition of special decorations + * crash on decoration type 7 without start/stop + * crash on decoration type 5 without start/stop + * crash when unterminated decoration in U: + * crash when random character greater than 128 in a s: line + * bad test of font encoding + * read access outside of array when exact memory allocation of w: + * read access outside of array on small line starting with %% + * fixes from Debian (Makefile/configure/INSTALL) + +------------------------------------------------------------------- Old: ---- v8.14.1.tar.gz New: ---- v8.14.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ abcm2ps.spec ++++++ --- /var/tmp/diff_new_pack.LpCfVG/_old 2018-12-28 12:34:26.352000444 +0100 +++ /var/tmp/diff_new_pack.LpCfVG/_new 2018-12-28 12:34:26.356000441 +0100 @@ -18,7 +18,7 @@ Name: abcm2ps -Version: 8.14.1 +Version: 8.14.2 Release: 0 Summary: A program to typeset abc tunes into Postscript License: GPL-2.0-or-later ++++++ v8.14.1.tar.gz -> v8.14.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abcm2ps-8.14.1/INSTALL new/abcm2ps-8.14.2/INSTALL --- old/abcm2ps-8.14.1/INSTALL 2018-11-15 18:16:01.000000000 +0100 +++ new/abcm2ps-8.14.2/INSTALL 2018-12-18 16:18:26.000000000 +0100 @@ -55,7 +55,12 @@ ./configure --CC=clang -If you want to use the 'pango' library, install it prior running 'configure'. +If you want to use the 'pango' library, install the development files +for pango and freetype2, as well as the pkg-config tool prior running +'configure'. + +In addition to the usual C build tools (mainly, gcc and make), you +will require the rst2man tool from the python-docutils package. Creating the binary is done by a standard call to 'make'. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abcm2ps-8.14.1/Makefile.in new/abcm2ps-8.14.2/Makefile.in --- old/abcm2ps-8.14.1/Makefile.in 2018-11-15 18:16:01.000000000 +0100 +++ new/abcm2ps-8.14.2/Makefile.in 2018-12-18 16:18:26.000000000 +0100 @@ -5,10 +5,10 @@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ -CPPFLAGS = @CPPFLAGS@ -I. -CPPPANGO = @CPPPANGO@ +CPPFLAGS = @CPPFLAGS@ CFLAGS = @CFLAGS@ -LDFLAGS = @LDFLAGS@ -lm +LDFLAGS = @LDFLAGS@ +LDLIBS = @LDLIBS@ prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -28,48 +28,35 @@ abcparse.o buffer.o deco.o draw.o format.o front.o glyph.o music.o parse.o \ subs.o svg.o syms.o abcm2ps: $(OBJECTS) - $(CC) $(CFLAGS) -o $@ $(OBJECTS) $(LDFLAGS) -$(OBJECTS): config.h Makefile -abcparse.o abcm2ps.o buffer.o deco.o draw.o format.o front.o glyph.o \ - music.o parse.o subs.o svg.o syms.o: abcm2ps.h -subs.o: subs.c - $(CC) $(CFLAGS) $(CPPFLAGS) $(CPPPANGO) -c -o $@ $< - -DOCFILES=$(addprefix $(srcdir)/,README.md) -examples=$(addprefix $(srcdir)/,*.abc *.eps) +$(OBJECTS): abcm2ps.h config.h Makefile abcm2ps.1: abcm2ps.rst if [ -x "$$(command -v rst2man)" ]; then\ - rst2man abcm2ps.rst abcm2ps.1;\ + rst2man $< $@;\ else\ - cp abcm2ps.rst abcm2ps.1;\ + cp $< $@;\ fi install: build - mkdir -p $(bindir); \ - mkdir -p $(datadir)/abcm2ps; \ - mkdir -p $(docdir)/abcm2ps/examples; \ - $(INSTALL_PROGRAM) abcm2ps $(bindir); \ - $(INSTALL_DATA) abc2svg.ttf $(datadir)/abcm2ps - for f in $(srcdir)/*.fmt; do \ - $(INSTALL_DATA) $$f $(datadir)/abcm2ps; \ - done - for f in $(DOCFILES); do \ - $(INSTALL_DATA) $$f $(docdir)/abcm2ps; \ - done - for f in $(examples); do \ - $(INSTALL_DATA) $$f $(docdir)/abcm2ps/examples; \ - done + mkdir -p $(bindir) + $(INSTALL_PROGRAM) abcm2ps $(bindir) + mkdir -p $(datadir)/abcm2ps + $(INSTALL_DATA) $(srcdir)/abc2svg.ttf $(datadir)/abcm2ps + $(INSTALL_DATA) $(srcdir)/*.fmt $(datadir)/abcm2ps + mkdir -p $(docdir)/abcm2ps/examples + $(INSTALL_DATA) $(srcdir)/README.md $(docdir)/abcm2ps + $(INSTALL_DATA) $(srcdir)/*.abc $(docdir)/abcm2ps/examples + $(INSTALL_DATA) $(srcdir)/*.eps $(docdir)/abcm2ps/examples mkdir -p $(mandir)/man1 $(INSTALL_DATA) abcm2ps.1 $(mandir)/man1 uninstall: - echo "uninstalling..."; \ - rm -f $(bindir)/abcm2ps; \ - rm -rf $(datadir)/abcm2ps; \ - rm -rf $(docdir)/abcm2ps; \ - rm -f $(mandir)/man1/abcm2ps.1 + echo "uninstalling..." + rm -f $(bindir)/abcm2ps + rm -fr $(datadir)/abcm2ps + rm -fr $(docdir)/abcm2ps + rm -f $(mandir)/man1/abcm2ps.1 EXAMPLES = accordion.ps \ chinese.ps \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abcm2ps-8.14.1/abcparse.c new/abcm2ps-8.14.2/abcparse.c --- old/abcm2ps-8.14.1/abcparse.c 2018-11-15 18:16:01.000000000 +0100 +++ new/abcm2ps-8.14.2/abcparse.c 2018-12-18 16:18:26.000000000 +0100 @@ -1194,6 +1194,8 @@ p++; /*fixme: 'U: <char> = "text"' is not treated */ get_deco(p, &s->u.user.value); + if (!s->u.user.value) + return 0; /* treat special pseudo decorations */ value = parse.deco_tb[s->u.user.value - 128]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abcm2ps-8.14.1/configure new/abcm2ps-8.14.2/configure --- old/abcm2ps-8.14.1/configure 2018-11-15 18:16:01.000000000 +0100 +++ new/abcm2ps-8.14.2/configure 2018-12-18 16:18:26.000000000 +0100 @@ -1,8 +1,8 @@ #! /bin/sh # (automatic update) -VERSION=8.14.1 -VDATE=2018-11-15 +VERSION=8.14.2 +VDATE=2018-12-18 CC=gcc CFLAGS="-g -O2 -Wall -pipe" @@ -25,6 +25,12 @@ esac done +case "$srcdir" in + *\ *) + echo "srcpath cannot contain spaces" + exit 1 +esac + if test "x$INSTALL_DATA" = x; then INSTALL_DATA='${INSTALL} -m 644' fi @@ -54,9 +60,8 @@ if which pkg-config > /dev/null ; then if pkg-config --exists freetype2 ; then if pkg-config --exists pangocairo ; then - CPPFLAGS="$CPPFLAGS -DHAVE_PANGO=1" - CPPPANGO="`pkg-config pango cairo freetype2 --cflags`" - LDFLAGS="$LDFLAGS `pkg-config pangocairo pangoft2 freetype2 --libs`" + CPPFLAGS="$CPPFLAGS -DHAVE_PANGO=1 `pkg-config pango cairo freetype2 --cflags`" + LDLIBS="$LDLIBS `pkg-config pangocairo pangoft2 freetype2 --libs`" else echo "pangocairo not found - no pango support" fi @@ -67,11 +72,17 @@ echo "pkg-config not found - no pango support" fi +CPPFLAGS="$CPPFLAGS -I." +# ./config.h will not be found in srcdir. + +LDLIBS="$LDLIBS -lm" +# Useful on some architectures. + sed "s+@CC@+$CC+ s+@CPPFLAGS@+$CPPFLAGS+ -s+@CPPPANGO@+$CPPPANGO+ s+@CFLAGS@+$CFLAGS+ s+@LDFLAGS@+$LDFLAGS+ +s+@LDLIBS@+$LDLIBS+ s+@INSTALL@+$INSTALL+ s+@INSTALL_DATA@+$INSTALL_DATA+ s+@INSTALL_PROGRAM@+$INSTALL_PROGRAM+ @@ -81,11 +92,11 @@ s+@bindir@+$bindir+ s+@datarootdir@+$datarootdir+ s+@mandir@+$mandir+ -s+@docdir@+$docdir+" Makefile.in > Makefile +s+@docdir@+$docdir+" "$srcdir/Makefile.in" > Makefile echo "Makefile created" sed "s/define VERSION xxx/\define VERSION \"$VERSION\"/ s/define VDATE xxx/define VDATE \"$VDATE\"/ s+define DEFAULT_FDIR xxx+define DEFAULT_FDIR \"$DEFAULT_FDIR\"+ -" config.h.in > config.h +" "$srcdir/config.h.in" > config.h echo "config.h created" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abcm2ps-8.14.1/deco.c new/abcm2ps-8.14.2/deco.c --- old/abcm2ps-8.14.1/deco.c 2018-11-15 18:16:01.000000000 +0100 +++ new/abcm2ps-8.14.2/deco.c 2018-12-18 16:18:26.000000000 +0100 @@ -142,19 +142,19 @@ "turn 3 turn 10 0 5", "wedge 3 wedge 8 1 1", "turnx 3 turnx 10 0 5", - "trill( 5 ltr 8 0 0", - "trill) 5 ltr 8 0 0", + "trill( 3 ltr 8 0 0", + "trill) 3 ltr 8 0 0", "snap 3 snap 14 3 3", "thumb 3 thumb 14 2 2", "arpeggio 2 arp 12 10 0", - "crescendo( 7 cresc 18 0 0", - "crescendo) 7 cresc 18 0 0", - "<( 7 cresc 18 0 0", - "<) 7 cresc 18 0 0", - "diminuendo( 7 dim 18 0 0", - "diminuendo) 7 dim 18 0 0", - ">( 7 dim 18 0 0", - ">) 7 dim 18 0 0", + "crescendo( 6 cresc 18 0 0", + "crescendo) 6 cresc 18 0 0", + "<( 6 cresc 18 0 0", + "<) 6 cresc 18 0 0", + "diminuendo( 6 dim 18 0 0", + "diminuendo) 6 dim 18 0 0", + ">( 6 dim 18 0 0", + ">) 6 dim 18 0 0", "-( 8 gliss 0 0 0", "-) 8 gliss 0 0 0", "~( 8 glisq 0 0 0", @@ -342,7 +342,7 @@ de->y = (float) (3 * (s->pits[0] - 18)) - 3; } -/* 7: special case for crescendo/diminuendo */ +/* special case for long dynamics */ static void d_cresc(struct deco_elt *de) { struct SYMBOL *s, *s2; @@ -491,6 +491,14 @@ // char *str; int up; + // don't treat here the long decorations + if (de->flags & DE_LDST) + return; + if (de->start) { + d_cresc(de); + return; + } + s = de->s; dd = &deco_def_tb[de->t]; @@ -572,7 +580,7 @@ de->y = (float) (3 * (yc - 18)); } -/* 5: special case for long trill */ +/* special case for long decoration */ static void d_trill(struct deco_elt *de) { struct SYMBOL *s, *s2; @@ -605,6 +613,8 @@ dd = &deco_def_tb[de->t]; if (dd->func == 4) // if below up = 0; + else if (strcmp(ps_func_tb[dd->ps_func], "o8va") == 0) + up = 1; else up = s2->multi >= 0; if (de->defl & DEF_NOEN) { /* if no decoration end */ @@ -814,11 +824,17 @@ error(1, NULL, "Invalid %%%%deco %s", text); return 128; } + if ((unsigned) c_func > 10 && (c_func < 32 || c_func > 41)) { error(1, NULL, "%%%%deco: bad C function index (%s)", text); return 128; } + if (c_func == 5) // old !trill(! + c_func = 3; + if (c_func == 7) // old !cresc(! + c_func = 6; + if (h < 0 || wl < 0 || wr < 0) { error(1, NULL, "%%%%deco: cannot have a negative value (%s)", text); return 128; @@ -892,7 +908,6 @@ dd->h = h; dd->wl = wl; dd->wr = wr; - dd->strx = strx; /* link the start and end of long decorations */ l = strlen(name); @@ -903,6 +918,7 @@ || (name[l] == ')' && !strchr(name, '('))) { struct deco_def_s *ddo; + strx = 0; // (no string) strcpy(name2, name); if (name[l] == '(') { dd->flags = DE_LDST; @@ -929,6 +945,7 @@ //fixme: memory leak... deco_define(strdup(name2)); } + dd->strx = strx; return ideco; } @@ -1008,14 +1025,10 @@ { char *name; - if (ideco < 128) { - name = deco[ideco]; - if (!name) { - error(1, s, "Bad character '%c'", ideco); - return 0; - } - } else { - name = parse.deco_tb[ideco - 128]; + name = ideco < 128 ? deco[ideco] : parse.deco_tb[ideco - 128]; + if (!name) { + error(1, s, "Bad character '%c'", ideco); + return 0; } for (ideco = 1; ideco < 128; ideco++) { if (!deco_def_tb[ideco].name) { @@ -1120,7 +1133,8 @@ dc->n = n; continue; default: - if (dd->name[0] == '8' && dd->name[1] == 'v' + if (strlen(dd->name) >= 4 + && dd->name[0] == '8' && dd->name[1] == 'v' && dd->name[4] == '\0') { if (dd->name[3] == '(') { if (dd->name[2] == 'a') @@ -1152,11 +1166,19 @@ dd->name); break; } + if (strlen(dd->name) != 5) + n = 0; + else + n = dd->name[4] - '0'; + if (n <= 0 || n > 4) { + error(1, s, "bad definition of !%s!", dd->name); + break; + } s->sflags |= (S_TREM2 | S_BEAM_END); s->sflags &= ~S_BEAM_ST; prev->sflags |= (S_TREM2 | S_BEAM_ST); prev->sflags &= ~S_BEAM_END; - s->aux = prev->aux = dd->name[4] - '0'; + s->aux = prev->aux = n; for (j = 0; j <= s->nhd; j++) s->u.note.notes[j].len *= 2; for (j = 0; j <= prev->nhd; j++) @@ -1174,6 +1196,11 @@ error(1, s, must_note_fmt, dd->name); break; } + if (strlen(dd->name) != 7 + || (dd->name[6] != '1' && dd->name[6] != '2')) { + error(1, s, "bad definition of !%s!", dd->name); + break; + } s->sflags |= dd->name[6] == '1' ? S_BEAM_BR1 : S_BEAM_BR2; break; @@ -1185,14 +1212,23 @@ error(1, s, must_note_fmt, dd->name); break; } + n = strlen(dd->name); + if (n > 3) { + error(1, s, "bad definition of !%s!", dd->name); + break; + } s->sflags |= S_TREM1; - s->aux = strlen(dd->name); /* 1, 2 or 3 */ + s->aux = n; /* 1, 2 or 3 */ break; case 39: /* beam-accel/beam-rall */ if (s->abc_type != ABC_T_NOTE) { error(1, s, must_note_fmt, dd->name); break; } + if (strlen(dd->name) < 6) { + error(1, s, "bad definition of !%s!", dd->name); + break; + } s->sflags |= S_FEATHERED_BEAM; set_feathered_beam(s, dd->name[5] == 'a'); break; @@ -1455,8 +1491,6 @@ break; case 3: /* d_upstaff */ case 4: -//fixme:trill does not work yet - case 5: /* trill */ posit = s->posit.orn; break; case 6: /* d_pf */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abcm2ps-8.14.1/format.c new/abcm2ps-8.14.2/format.c --- old/abcm2ps-8.14.1/format.c 2018-11-15 18:16:01.000000000 +0100 +++ new/abcm2ps-8.14.2/format.c 2018-12-18 16:18:26.000000000 +0100 @@ -1424,5 +1424,5 @@ /* -- get the encoding of a font -- */ int get_font_encoding(int ft) { - return font_enc[ft]; + return font_enc[cfmt.font_tb[ft].fnum]; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abcm2ps-8.14.1/music.c new/abcm2ps-8.14.2/music.c --- old/abcm2ps-8.14.1/music.c 2018-11-15 18:16:01.000000000 +0100 +++ new/abcm2ps-8.14.2/music.c 2018-12-18 16:18:26.000000000 +0100 @@ -3202,7 +3202,7 @@ /* add a clef at start of the main voices */ last_s = tsfirst; - while (last_s->type == CLEF) { /* move the starting clefs */ + while (last_s && last_s->type == CLEF) { /* move the starting clefs */ voice = last_s->voice; p_voice = &voice_tb[voice]; if (cursys->voice[voice].range >= 0 @@ -3242,7 +3242,7 @@ s->type = CLEF; s->voice = voice; s->staff = staff; - s->time = last_s->time; + s->time = last_s ? last_s->time : 0; s->next = p_voice->sym; if (s->next) { s->next->prev = s; @@ -3252,16 +3252,18 @@ } p_voice->last_sym = p_voice->sym = s; s->ts_next = last_s; - s->ts_prev = last_s->ts_prev; + s->ts_prev = last_s ? last_s->ts_prev : NULL; if (!s->ts_prev) { tsfirst = s; s->sflags |= S_SEQST; } else { s->ts_prev->ts_next = s; } - last_s->ts_prev = s; - if (last_s->type == CLEF) - last_s->sflags &= ~S_SEQST; + if (last_s) { + last_s->ts_prev = s; + if (last_s->type == CLEF) + last_s->sflags &= ~S_SEQST; + } // if (cursys->voice[voice].second) // s->sflags |= S_SECOND; if (staff_tb[staff].s_clef->u.clef.invis @@ -3277,7 +3279,8 @@ || cursys->voice[voice].second || cursys->staff[cursys->voice[voice].staff].empty) continue; - if (last_s->voice == voice && last_s->type == KEYSIG) { + if (last_s + && last_s->voice == voice && last_s->type == KEYSIG) { p_voice->last_sym = last_s; last_s->aux = last_s->u.key.sf; // no key cancel last_s = last_s->ts_next; @@ -3301,7 +3304,8 @@ || cursys->staff[cursys->voice[voice].staff].empty || p_voice->meter.nmeter == 0) /* M:none */ continue; - if (last_s->voice == voice && last_s->type == TIMESIG) { + if (last_s + && last_s->voice == voice && last_s->type == TIMESIG) { p_voice->last_sym = last_s; last_s = last_s->ts_next; continue; @@ -3320,7 +3324,8 @@ // if bar already, keep it in sequence voice = p_voice - voice_tb; - if (last_s->voice == voice && last_s->type == BAR) { + if (last_s + && last_s->voice == voice && last_s->type == BAR) { p_voice->last_sym = last_s; last_s = last_s->ts_next; continue; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abcm2ps-8.14.1/parse.c new/abcm2ps-8.14.2/parse.c --- old/abcm2ps-8.14.1/parse.c 2018-11-15 18:16:01.000000000 +0100 +++ new/abcm2ps-8.14.2/parse.c 2018-12-18 16:18:26.000000000 +0100 @@ -918,11 +918,13 @@ s->ts_prev->ts_next = s->ts_next; s->next = s2; s->prev = s2->prev; - s->prev->next = s; + if (s->prev) + s->prev->next = s; s2->prev = s; s->ts_next = s2; s->ts_prev = s2->ts_prev; - s->ts_prev->ts_next = s; + if (s->ts_prev) + s->ts_prev->ts_next = s; s2->ts_prev = s; // if (s->sflags & S_NEW_SY) { // s->sflags &= ~S_NEW_SY; @@ -5161,6 +5163,8 @@ p = s->text + 2; /* skip '%%' */ q = p + strlen(p) - 5; + if (q < p) + return s; lock = strncmp(q, " lock", 5) == 0; if (lock) *q = '\0'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abcm2ps-8.14.1/subs.c new/abcm2ps-8.14.2/subs.c --- old/abcm2ps-8.14.1/subs.c 2018-11-15 18:16:01.000000000 +0100 +++ new/abcm2ps-8.14.2/subs.c 2018-12-18 16:18:26.000000000 +0100 @@ -1240,9 +1240,10 @@ } p += 2; } - r = 0; + r = NULL; q = p; - if (isdigit((unsigned char) *p) || p[1] == '.') { + if (isdigit((unsigned char) *p) + || (*p != '\0' && p[1] == '.')) { while (*p != '\0') { p++; if (*p == ' ' @@ -1255,7 +1256,7 @@ p++; } - if (r != 0) { + if (r) { sep = *r; *r = '\0'; a2b("%.1f 0 M", x); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/abcm2ps-8.14.1/svg.c new/abcm2ps-8.14.2/svg.c --- old/abcm2ps-8.14.1/svg.c 2018-11-15 18:16:01.000000000 +0100 +++ new/abcm2ps-8.14.2/svg.c 2018-12-18 16:18:26.000000000 +0100 @@ -1694,6 +1694,11 @@ s = NULL; break; default: + if (!stack) { + fprintf(stderr, "svg top: Stack empty\n"); + ps_error = 1; + return; + } if (stack->type == STR) { s = pop_free_str(); if (!s || s[0] != '(') { @@ -2483,6 +2488,8 @@ case 'F': if (sscanf(op, "F%d", &n) == 1) { h = pop_free_val(); + if (!fontnames[n]) + break; if (gcur.font_s != h || strcmp(fontnames[n], gcur.font_n) != 0) { free(gcur.font_n_old);
participants (1)
-
root