Thread (104 messages) flat view 104 messages, 5 authors, 2016-06-15

Re: [PATCH 26/67] replace trivial malloc + sprintf /strcpy calls to xstrfmt

From: Eric Sunshine <hidden>
Date: 2016-06-15 23:06:34

On Tue, Sep 15, 2015 at 11:45 AM, Jeff King [off-list ref] wrote:
replace trivial malloc + sprintf /strcpy calls to xstrfmt
s/to/with/

Also, do you want either to add a space after '/' or drop the one before it?
quoted hunk ↗ jump to hunk
It's a common pattern to do:

  foo = xmalloc(strlen(one) + strlen(two) + 1 + 1);
  sprintf(foo, "%s %s", one, two);

(or possibly some variant with strcpy()s or a more
complicated length computation).  We can switch these to use
xstrfmt, which is shorter, involves less error-prone manual
computation, and removes many sprintf and strcpy calls which
make it harder to audit the code for real buffer overflows.

Signed-off-by: Jeff King <redacted>
---
--- a/imap-send.c
+++ b/imap-send.c
@@ -889,9 +889,8 @@ static char *cram(const char *challenge_64, const char *user, const char *pass)
        }

        /* response: "<user> <digest in hex>" */
-       resp_len = strlen(user) + 1 + strlen(hex) + 1;
-       response = xmalloc(resp_len);
-       sprintf(response, "%s %s", user, hex);
+       response = xstrfmt("%s %s", user, hex);
+       resp_len = strlen(response);

        response_64 = xmalloc(ENCODED_SIZE(resp_len) + 1);
The original resp_len calculation included the NUL but the revised
does not. If I'm reading this correctly, the revised calculation is
correct, and the original was over-allocating response_64, right?
        encoded_len = EVP_EncodeBlock((unsigned char *)response_64,
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help