From: Tay Ray Chuan <rctay89@gmail.com>
To: Git Mailing List <git@vger.kernel.org>
Cc: Junio C Hamano <gitster@pobox.com>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Mike Hommey <mh@glandium.org>
Subject: [PATCH 09/23] http*: copy string returned by sha1_to_hex
Date: Sat, 6 Jun 2009 00:04:45 +0800 [thread overview]
Message-ID: <20090606000445.326d2ef7.rctay89@gmail.com> (raw)
In the fetch_index implementations in http-push.c and http-walker.c,
the string returned by sha1_to_hex is assumed to stay immutable.
This patch ensures that hex stays immutable by copying the string
returned by sha1_to_hex (via xstrdup) and frees it subsequently. It
also refactors free()'s and fclose()'s with labels.
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
http-push.c | 47 ++++++++++++++++++++++++-----------------------
http-walker.c | 45 +++++++++++++++++++++++----------------------
2 files changed, 47 insertions(+), 45 deletions(-)
diff --git a/http-push.c b/http-push.c
index 6ac0d63..c8cb6e4 100644
--- a/http-push.c
+++ b/http-push.c
@@ -958,7 +958,8 @@ static int add_send_request(struct object *obj, struct remote_lock *lock)
static int fetch_index(unsigned char *sha1)
{
- char *hex = sha1_to_hex(sha1);
+ int ret = 0;
+ char *hex = xstrdup(sha1_to_hex(sha1));
char *filename;
char *url;
char tmpfile[PATH_MAX];
@@ -980,18 +981,18 @@ static int fetch_index(unsigned char *sha1)
if (start_active_slot(slot)) {
run_active_slot(slot);
if (results.curl_result != CURLE_OK) {
- free(url);
- return error("Unable to verify pack %s is available",
- hex);
+ ret = error("Unable to verify pack %s is available",
+ hex);
+ goto cleanup_pack;
}
} else {
- free(url);
- return error("Unable to start request");
+ ret = error("Unable to start request");
+ goto cleanup_pack;
}
if (has_pack_index(sha1)) {
- free(url);
- return 0;
+ ret = 0;
+ goto cleanup_pack;
}
if (push_verbosely)
@@ -1003,9 +1004,9 @@ static int fetch_index(unsigned char *sha1)
snprintf(tmpfile, sizeof(tmpfile), "%s.temp", filename);
indexfile = fopen(tmpfile, "a");
if (!indexfile) {
- free(url);
- return error("Unable to open local file %s for pack index",
- tmpfile);
+ ret = error("Unable to open local file %s for pack index",
+ tmpfile);
+ goto cleanup_pack;
}
slot = get_active_slot();
@@ -1036,24 +1037,24 @@ static int fetch_index(unsigned char *sha1)
if (start_active_slot(slot)) {
run_active_slot(slot);
if (results.curl_result != CURLE_OK) {
- free(url);
- fclose(indexfile);
- slot->local = NULL;
- return error("Unable to get pack index %s\n%s", url,
- curl_errorstr);
+ ret = error("Unable to get pack index %s\n%s", url,
+ curl_errorstr);
+ goto cleanup_index;
}
} else {
- free(url);
- fclose(indexfile);
- slot->local = NULL;
- return error("Unable to start request");
+ ret = error("Unable to start request");
+ goto cleanup_index;
}
- free(url);
+ ret = move_temp_to_file(tmpfile, filename);
+
+cleanup_index:
fclose(indexfile);
slot->local = NULL;
-
- return move_temp_to_file(tmpfile, filename);
+cleanup_pack:
+ free(url);
+ free(hex);
+ return ret;
}
static int setup_index(unsigned char *sha1)
diff --git a/http-walker.c b/http-walker.c
index bbc3023..d6cc622 100644
--- a/http-walker.c
+++ b/http-walker.c
@@ -371,7 +371,8 @@ static void prefetch(struct walker *walker, unsigned char *sha1)
static int fetch_index(struct walker *walker, struct alt_base *repo, unsigned char *sha1)
{
- char *hex = sha1_to_hex(sha1);
+ int ret = 0;
+ char *hex = xstrdup(sha1_to_hex(sha1));
char *filename;
char *url;
char tmpfile[PATH_MAX];
@@ -394,18 +395,18 @@ static int fetch_index(struct walker *walker, struct alt_base *repo, unsigned ch
if (start_active_slot(slot)) {
run_active_slot(slot);
if (results.curl_result != CURLE_OK) {
- free(url);
- return error("Unable to verify pack %s is available",
+ ret = error("Unable to verify pack %s is available",
hex);
+ goto cleanup_pack;
}
} else {
- free(url);
- return error("Unable to start request");
+ ret = error("Unable to start request");
+ goto cleanup_pack;
}
if (has_pack_index(sha1)) {
- free(url);
- return 0;
+ ret = 0;
+ goto cleanup_pack;
}
if (walker->get_verbosely)
@@ -417,9 +418,9 @@ static int fetch_index(struct walker *walker, struct alt_base *repo, unsigned ch
snprintf(tmpfile, sizeof(tmpfile), "%s.temp", filename);
indexfile = fopen(tmpfile, "a");
if (!indexfile) {
- free(url);
- return error("Unable to open local file %s for pack index",
- tmpfile);
+ ret = error("Unable to open local file %s for pack index",
+ tmpfile);
+ goto cleanup_pack;
}
slot = get_active_slot();
@@ -450,24 +451,24 @@ static int fetch_index(struct walker *walker, struct alt_base *repo, unsigned ch
if (start_active_slot(slot)) {
run_active_slot(slot);
if (results.curl_result != CURLE_OK) {
- free(url);
- fclose(indexfile);
- slot->local = NULL;
- return error("Unable to get pack index %s\n%s", url,
- curl_errorstr);
+ ret = error("Unable to get pack index %s\n%s", url,
+ curl_errorstr);
+ goto cleanup_index;
}
} else {
- free(url);
- fclose(indexfile);
- slot->local = NULL;
- return error("Unable to start request");
+ ret = error("Unable to start request");
+ goto cleanup_index;
}
- free(url);
+ ret = move_temp_to_file(tmpfile, filename);
+
+cleanup_index:
fclose(indexfile);
slot->local = NULL;
-
- return move_temp_to_file(tmpfile, filename);
+cleanup_pack:
+ free(url);
+ free(hex);
+ return ret;
}
static int setup_index(struct walker *walker, struct alt_base *repo, unsigned char *sha1)
--
1.6.3.1
next reply other threads:[~2009-06-05 16:09 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-05 16:04 Tay Ray Chuan [this message]
[not found] <cover.1244277116.git.rctay89@gmail.com>
2009-06-06 8:43 ` [PATCH 09/23] http*: copy string returned by sha1_to_hex Tay Ray Chuan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090606000445.326d2ef7.rctay89@gmail.com \
--to=rctay89@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=mh@glandium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.