diff options
Diffstat (limited to 'Build')
-rw-r--r-- | Build/source/texk/devnag/ChangeLog | 6 | ||||
-rw-r--r-- | Build/source/texk/devnag/src/devnag.c | 11 |
2 files changed, 11 insertions, 6 deletions
diff --git a/Build/source/texk/devnag/ChangeLog b/Build/source/texk/devnag/ChangeLog index 965a42b8710..07336c9eb2f 100644 --- a/Build/source/texk/devnag/ChangeLog +++ b/Build/source/texk/devnag/ChangeLog @@ -1,3 +1,9 @@ +2014-02-17 Peter Breitenlohner <peb@mppmu.mpg.de> + + * src/devnag.c (dnproc): Bug fix: Replace strcpy() by memmove() + when src and dest overlap. + Reported by Richard Koch <koch@math.uoregon.edu>. + 2013-10-01 Peter Breitenlohner <peb@mppmu.mpg.de> * configure.ac: Drop AC_HEADER_STDC, fail for missing strstr(). diff --git a/Build/source/texk/devnag/src/devnag.c b/Build/source/texk/devnag/src/devnag.c index bc95c182472..4e48d7ab248 100644 --- a/Build/source/texk/devnag/src/devnag.c +++ b/Build/source/texk/devnag/src/devnag.c @@ -1656,8 +1656,7 @@ void dnproc(void) { wrong[2] = '\0'; err_ill(wrong); } - else - if (i == 5) put_ch(47); + else if (i == 5) put_ch(47); else put_ch((short)(i+20)); break; case end_of_line: @@ -1670,7 +1669,7 @@ void dnproc(void) { else put_ch('}'); dnready = TRUE; put_word(); - strcpy(inbuf, &inbuf[buf_idx]); + memmove(inbuf, inbuf+buf_idx, strlen(inbuf+buf_idx)+1); } break; case '}': @@ -1680,7 +1679,7 @@ void dnproc(void) { else put_ch(symbol); dnready = TRUE; put_word(); - strcpy(inbuf, &inbuf[buf_idx]); + memmove(inbuf, inbuf+buf_idx, strlen(inbuf+buf_idx)+1); } else put_ch(symbol); break; @@ -1698,7 +1697,7 @@ void dnproc(void) { sendchar('\n'); break; case '<': - put_syll(); + put_syll(); do { symbol = inp_ch(); if (symbol == end_of_line) symbol = '\n'; @@ -1794,7 +1793,7 @@ void dnproc(void) { fputs("Error: missing }", stderr); exit(1); default: - if (symbol < 0) err_ill('\0'); /* accented character inside dn mode */ + if (symbol < 0) err_ill('\0'); /* accented character inside dn mode */ i = 0; do { i++; } while ((i != 10) && (chset4[i-1] != symbol)); if (i == 10) put_ch(symbol); |