summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--lib/areadlink-with-size.c7
2 files changed, 14 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index d6209efafc..c0ee6cec67 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2019-07-05 Bruno Haible <bruno@clisp.org>
+
+ areadlink-with-size: Don't return an excessive memory allocation.
+ Reported by Andreas Dilger <adilger@whamcloud.com>.
+ * lib/areadlink-with-size.c (areadlink_with_size): Shrink the buffer
+ before returning it.
+
2019-07-03 Bruno Haible <bruno@clisp.org>
renameatu: Fix test failure on MSVC.
diff --git a/lib/areadlink-with-size.c b/lib/areadlink-with-size.c
index eacad3f613..364cc08584 100644
--- a/lib/areadlink-with-size.c
+++ b/lib/areadlink-with-size.c
@@ -87,6 +87,13 @@ areadlink_with_size (char const *file, size_t size)
if (link_length < buf_size)
{
buffer[link_length] = 0;
+ /* Shrink BUFFER before returning it. */
+ if (link_length + 1 < buf_size)
+ {
+ char *shrinked_buffer = realloc (buffer, link_length + 1);
+ if (shrinked_buffer != NULL)
+ buffer = shrinked_buffer;
+ }
return buffer;
}