diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2013-12-14 13:42:26 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2013-12-14 13:42:26 +0000 |
commit | fbb8ecebf32e3dc91c173f8930c022cbb07e328e (patch) | |
tree | b9ac2a6a0fbb0a1cd843bcd61e26c3372eb706c8 /Build/source/texk/dvipdfm-x/spc_xtx.c | |
parent | d6b74aa0480e121e87775225221c87cb476f2b3f (diff) |
Guarantee that mline in is_pdfm_mapline(mline) is a zero-ended string
git-svn-id: svn://tug.org/texlive/trunk@32410 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipdfm-x/spc_xtx.c')
-rw-r--r-- | Build/source/texk/dvipdfm-x/spc_xtx.c | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/Build/source/texk/dvipdfm-x/spc_xtx.c b/Build/source/texk/dvipdfm-x/spc_xtx.c index ed0b667f8c2..c5de603922e 100644 --- a/Build/source/texk/dvipdfm-x/spc_xtx.c +++ b/Build/source/texk/dvipdfm-x/spc_xtx.c @@ -201,6 +201,9 @@ spc_handler_xtx_fontmapline (struct spc_env *spe, struct spc_arg *ap) fontmap_rec *mrec; char *map_name, opchr; int error = 0; + static char buffer[1024]; + const char *p; + char *q; skip_white(&ap->curptr, ap->endptr); if (ap->curptr >= ap->endptr) { @@ -225,29 +228,21 @@ spc_handler_xtx_fontmapline (struct spc_env *spe, struct spc_arg *ap) error = -1; } break; - case '+': - mrec = NEW(1, fontmap_rec); - pdf_init_fontmap_record(mrec); - error = pdf_read_fontmap_line(mrec, ap->curptr, (long) (ap->endptr - ap->curptr), - is_pdfm_mapline(ap->curptr)); - if (error) - spc_warn(spe, "Invalid fontmap line."); - else { - pdf_append_fontmap_record(mrec->map_name, mrec); - } - pdf_clear_fontmap_record(mrec); - RELEASE(mrec); - break; default: + p = ap->curptr; + q = buffer; + while (p < ap->endptr) + *q++ = *p++; + *q = '\0'; mrec = NEW(1, fontmap_rec); pdf_init_fontmap_record(mrec); - error = pdf_read_fontmap_line(mrec, ap->curptr, (long) (ap->endptr - ap->curptr), - is_pdfm_mapline(ap->curptr)); + error = pdf_read_fontmap_line(mrec, buffer, (long) (ap->endptr - ap->curptr), is_pdfm_mapline(buffer)); if (error) spc_warn(spe, "Invalid fontmap line."); - else { + else if (opchr == '+') + pdf_append_fontmap_record(mrec->map_name, mrec); + else pdf_insert_fontmap_record(mrec->map_name, mrec); - } pdf_clear_fontmap_record(mrec); RELEASE(mrec); break; @@ -255,7 +250,7 @@ spc_handler_xtx_fontmapline (struct spc_env *spe, struct spc_arg *ap) if (!error) ap->curptr = ap->endptr; - return 0; + return 0; } static int |