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 <[email protected]>
+
+- 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);


Reply via email to