aboutsummaryrefslogtreecommitdiff
path: root/src/metadataChunk.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/metadataChunk.c')
-rw-r--r--src/metadataChunk.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/metadataChunk.c b/src/metadataChunk.c
index 7d57c00a..d1166985 100644
--- a/src/metadataChunk.c
+++ b/src/metadataChunk.c
@@ -17,13 +17,12 @@
*/
#include "metadataChunk.h"
+#include "gcc.h"
#include <string.h>
static void initMetadataChunk(MetadataChunk * chunk)
{
- memset(chunk, 0, sizeof(MetadataChunk));
-
chunk->name = -1;
chunk->artist = -1;
chunk->album = -1;
@@ -54,8 +53,12 @@ MpdTag *metadataChunkToMpdTagDup(MetadataChunk * chunk)
if(element < 0 && string && (slen = strlen(string)) && \
pos < METADATA_BUFFER_LENGTH-1) \
{ \
- strncpy(chunk->buffer+pos, string, \
- METADATA_BUFFER_LENGTH-1-pos); \
+ size_t len = slen; \
+ size_t max = METADATA_BUFFER_LENGTH - 1 - pos; \
+ if (mpd_unlikely(len > max)) \
+ len = max; \
+ memcpy(chunk->buffer+pos, string, len); \
+ *(chunk->buffer+pos+len) = '\0'; \
element = pos; \
pos += slen+1; \
} \