summaryrefslogtreecommitdiff
path: root/src/htsback.c
diff options
context:
space:
mode:
authorXavier Roche <xroche@users.noreply.github.com>2014-05-02 15:13:29 +0000
committerXavier Roche <xroche@users.noreply.github.com>2014-05-02 15:13:29 +0000
commit5544f503bf0fcfd050b4e338e8ec7b22e2f53b9a (patch)
tree2d65f1fd285c450cbb1c676697ad13b5a47a835c /src/htsback.c
parentb3fa8537c411e6e2d53044b1d5d20c361d2ad17d (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.c57
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;