summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Huddleston <jeremyhu@apple.com>2011-05-07 22:05:16 -0700
committerJeremy Huddleston <jeremyhu@apple.com>2011-05-07 22:05:16 -0700
commitb6b5bc9e9874934dd1c1b80a1aa0c0b1c454eab2 (patch)
treef8016b5eb78e1a7102cc92914af8a095a621e1f9
parent1f801eea5f4d17b83aee1170423d65a74e01a138 (diff)
Improve error handling in copy_to_scratch
handle.c:95:5: warning: Array access (from variable 'buf') results in a null pointer dereference buf[len] = '\0'; ^~~ Found-by: clang static analyzer Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
-rw-r--r--handle.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/handle.c b/handle.c
index 737e146..a6e6f9f 100644
--- a/handle.c
+++ b/handle.c
@@ -82,17 +82,22 @@ copy_to_scratch(const char *s, int len)
static char *buf = NULL;
static int buflen = 0;
- if (len > buflen) {
+ if (len < 0)
+ len = 0;
+
+ if (len >= buflen) {
if (buf) free (buf);
buflen = (len < 40) ? 80 : (len * 2);
buf = (char *) malloc (buflen+1);
+ if (!buf) {
+ fprintf (stderr, "attempt to allocate %d byte scratch buffer\n", buflen + 1);
+ return NULL;
+ }
}
- if (len > 0)
- strncpy (buf, s, len);
- else
- len = 0;
+ strncpy (buf, s, len);
buf[len] = '\0';
+
return (buf);
}