diff options
| author | Philip <pipcet@gmail.com> | 2015-04-30 21:31:32 +0000 |
|---|---|---|
| committer | Philip <pipcet@gmail.com> | 2015-04-30 21:35:21 +0000 |
| commit | 951a43ea6c77436209c3dc974d8b18e5b2e87936 (patch) | |
| tree | 41e47cb9200a64397409a5b18447a571f7593573 | |
| parent | 2e04fa8872f38aea4eb96fd3424c3d6762b5262d (diff) | |
| download | tinycc-951a43ea6c77436209c3dc974d8b18e5b2e87936.tar.gz tinycc-951a43ea6c77436209c3dc974d8b18e5b2e87936.tar.bz2 | |
fix a potential end-of-buffer issue in tccelf.c
also read characters one at a time when PARSE_DEBUG is set; after this
patch, things seem to work with that.
| -rw-r--r-- | tccelf.c | 7 | ||||
| -rw-r--r-- | tccpp.c | 2 |
2 files changed, 6 insertions, 3 deletions
@@ -3275,6 +3275,11 @@ static int ld_next(TCCState *s1, char *name, int name_size) goto parse_name; } break; + case '\\': + ch = handle_eob(); + if (ch != '\\') + goto redo; + /* fall through */ /* case 'a' ... 'z': */ case 'a': case 'b': @@ -3330,7 +3335,6 @@ static int ld_next(TCCState *s1, char *name, int name_size) case 'Y': case 'Z': case '_': - case '\\': case '.': case '$': case '~': @@ -3462,7 +3466,6 @@ ST_FUNC int tcc_load_ldscript(TCCState *s1) char filename[1024]; int t, ret; - ch = file->buf_ptr[0]; ch = handle_eob(); for(;;) { t = ld_next(s1, cmd, sizeof(cmd)); @@ -386,7 +386,7 @@ static int tcc_peekc_slow(BufferedFile *bf) if (bf->buf_ptr >= bf->buf_end) { if (bf->fd != -1) { #if defined(PARSE_DEBUG) - len = 8; + len = 1; #else len = IO_BUF_SIZE; #endif |
