diff options
author | Xavier Roche <xroche@users.noreply.github.com> | 2014-05-02 15:13:29 +0000 |
---|---|---|
committer | Xavier Roche <xroche@users.noreply.github.com> | 2014-05-02 15:13:29 +0000 |
commit | 5544f503bf0fcfd050b4e338e8ec7b22e2f53b9a (patch) | |
tree | 2d65f1fd285c450cbb1c676697ad13b5a47a835c /src/htsback.c | |
parent | b3fa8537c411e6e2d53044b1d5d20c361d2ad17d (diff) |
Big cleanup in functions writing to a char buffer without proper size boundary.
Diffstat (limited to 'src/htsback.c')
-rw-r--r-- | src/htsback.c | 57 |
1 files changed, 29 insertions, 28 deletions
diff --git a/src/htsback.c b/src/htsback.c index e1419c6..2eab7d9 100644 --- a/src/htsback.c +++ b/src/htsback.c @@ -195,7 +195,7 @@ static int back_index_ready(httrackp * opt, struct_back * sback, char *adr, char *fileback = (char *) ptr; char catbuff[CATBUFF_SIZE]; - if ((fp = FOPEN(fconv(catbuff, fileback), "rb")) != NULL) { + if ((fp = FOPEN(fconv(catbuff, sizeof(catbuff), fileback), "rb")) != NULL) { if (back_unserialize(fp, &itemback) != 0) { if (itemback != NULL) { back_clear_entry(itemback); @@ -640,7 +640,7 @@ int back_finalize(httrackp * opt, cache_back * cache, struct_back * sback, fclose(fp); fp = NULL; // remove (temporary) file! - UNLINK(fconv(catbuff, back[p].url_sav)); + UNLINK(fconv(catbuff, sizeof(catbuff), back[p].url_sav)); } if (fp) fclose(fp); @@ -765,27 +765,27 @@ int back_finalize(httrackp * opt, cache_back * cache, struct_back * sback, } } if (cache->txt) { +#undef ESC_URL +#define ESC_URL(S) escape_check_url_addr(S, OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt)) fprintf(cache->txt, "%d\t" "%s ('%s')\t" "%s\t" "%s%s\t" "%s%s%s\t%s\t" "(from %s%s%s)" LF, back[p].r.statuscode, state, - escape_check_url_addr(OPT_GET_BUFF(opt), back[p].r.msg), - escape_check_url_addr(OPT_GET_BUFF(opt), - back[p].r.contenttype), - ((back[p].r. - etag[0]) ? "etag:" : ((back[p].r. + ESC_URL(back[p].r.msg), + ESC_URL(back[p].r.contenttype), + ((back[p].r.etag[0]) ? "etag:" : ((back[p].r. lastmodified[0]) ? "date:" : "")), - escape_check_url_addr(OPT_GET_BUFF(opt), - (back[p].r.etag[0]) ? back[p].r. + ESC_URL((back[p].r.etag[0]) ? back[p].r. etag : (back[p].r.lastmodified)), (link_has_authority(back[p].url_adr) ? "" : "http://"), - escape_check_url_addr(OPT_GET_BUFF(opt), back[p].url_adr), - escape_check_url_addr(OPT_GET_BUFF(opt), back[p].url_fil), - escape_check_url_addr(OPT_GET_BUFF(opt), back[p].url_sav), + ESC_URL(back[p].url_adr), + ESC_URL(back[p].url_fil), + ESC_URL(back[p].url_sav), (link_has_authority(back[p].referer_adr) || !back[p].referer_adr[0]) ? "" : "http://", - escape_check_url_addr(OPT_GET_BUFF(opt), back[p].referer_adr), - escape_check_url_addr(OPT_GET_BUFF(opt), back[p].referer_fil) + ESC_URL(back[p].referer_adr), + ESC_URL(back[p].referer_fil) ); +#undef ESC_URL if (opt->flush) fflush(cache->txt); } @@ -985,7 +985,7 @@ int back_serialize_ref(httrackp * opt, const lien_back * src) { if (fp == NULL) { #ifdef _WIN32 if (mkdir - (fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), CACHE_REFNAME)) + (fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), CACHE_REFNAME)) == 0) #else if (mkdir @@ -1504,7 +1504,8 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr, if (cache->cached_tests != NULL) { intptr_t ptr = 0; - if (inthash_read(cache->cached_tests, concat(OPT_GET_BUFF(opt), adr, fil), &ptr)) { // gotcha + if (inthash_read(cache->cached_tests, + concat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), adr, fil), &ptr)) { // gotcha if (ptr != 0) { char *text = (char *) ptr; char *lf = strchr(text, '\n'); @@ -1571,7 +1572,7 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr, if (pos < 0) { // pas de mise en cache data, vérifier existence #endif /* note: no check with IS_DELAYED_EXT() enabled - postcheck by client please! */ - if (save[0] != '\0' && !IS_DELAYED_EXT(save) && fsize_utf8(fconv(catbuff, save)) <= 0) { // fichier final n'existe pas ou est vide! + if (save[0] != '\0' && !IS_DELAYED_EXT(save) && fsize_utf8(fconv(catbuff, sizeof(catbuff), save)) <= 0) { // fichier final n'existe pas ou est vide! int found = 0; /* It is possible that the file has been moved due to changes in build structure */ @@ -1589,10 +1590,10 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr, if (r.is_write && previous_save[0] != '\0') { /* Exists, but with another (old) filename: rename (almost) silently */ if (strcmp(previous_save, save) != 0 - && fexist_utf8(fconv(catbuff, previous_save))) { - rename(fconv(catbuff, previous_save), - fconv(catbuff2, save)); - if (fexist_utf8(fconv(catbuff, save))) { + && fexist_utf8(fconv(catbuff, sizeof(catbuff), previous_save))) { + rename(fconv(catbuff, sizeof(catbuff), previous_save), + fconv(catbuff2, sizeof(catbuff2), save)); + if (fexist_utf8(fconv(catbuff, sizeof(catbuff), save))) { found = 1; hts_log_print(opt, LOG_DEBUG, "File '%s' has been renamed since last mirror to '%s' ; applying changes", @@ -1618,8 +1619,8 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr, // sinon, le fichier est ok à priori, mais on renverra un if-modified-since pour // en être sûr if (opt->norecatch) { // tester norecatch - if (!fexist_utf8(fconv(catbuff, save))) { // fichier existe pas mais déclaré: on l'a effacé - FILE *fp = FOPEN(fconv(catbuff, save), "wb"); + if (!fexist_utf8(fconv(catbuff, sizeof(catbuff), save))) { // fichier existe pas mais déclaré: on l'a effacé + FILE *fp = FOPEN(fconv(catbuff, sizeof(catbuff), save), "wb"); if (fp) fclose(fp); @@ -2455,7 +2456,7 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache, #if HTS_WIDE_DEBUG DEBUG_W("select\n"); #endif - select(nfds, &fds, &fds_c, &fds_e, &tv); + select((int) nfds, &fds, &fds_c, &fds_e, &tv); #if HTS_WIDE_DEBUG DEBUG_W("select done\n"); #endif @@ -2533,7 +2534,7 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache, back[i].r.ssl_con = SSL_new(openssl_ctx); if (back[i].r.ssl_con) { SSL_clear(back[i].r.ssl_con); - if (SSL_set_fd(back[i].r.ssl_con, back[i].r.soc) == 1) { + if (SSL_set_fd(back[i].r.ssl_con, (int) back[i].r.soc) == 1) { SSL_set_connect_state(back[i].r.ssl_con); back[i].status = STATUS_SSL_WAIT_HANDSHAKE; /* handshake wait */ } else @@ -2778,7 +2779,7 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache, if (back[i].r.compressed && /* .gz are *NOT* depacked!! */ (strfield - (get_ext(catbuff, back[i].url_sav), "gz") == 0) + (get_ext(catbuff, sizeof(catbuff), back[i].url_sav), "gz") == 0) ) { if (create_back_tmpfile(opt, &back[i]) == 0) { assert(back[i].tmpfile != NULL); @@ -3656,7 +3657,7 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache, file_notify(opt, back[i].url_adr, back[i].url_fil, back[i].url_sav, 0, 1, back[i].r.notmodified); - back[i].r.out = FOPEN(fconv(catbuff, back[i].url_sav), "ab"); // append + back[i].r.out = FOPEN(fconv(catbuff, sizeof(catbuff), back[i].url_sav), "ab"); // append if (back[i].r.out && opt->cache != 0) { back[i].r.is_write = 1; // écrire back[i].r.size = sz; // déja écrit @@ -3682,7 +3683,7 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache, } } else { // mémoire FILE *fp = - FOPEN(fconv(catbuff, back[i].url_sav), "rb"); + FOPEN(fconv(catbuff, sizeof(catbuff), back[i].url_sav), "rb"); if (fp) { LLint alloc_mem = sz + 1; |