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(a)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);